摘要:在.net當在隨機訪問文件中鎖定記錄時,我們無法在文件中的鎖定記錄之前訪問記錄。.net文件隨機訪問recoard鎖定
爲了演示這個問題,我寫了兩個簡單的程序,一個打開並鎖定一條記錄,另一個嘗試通讀。
結果是,當在第一個程序中鎖定第10個記錄中的第9個記錄時,我們能夠讀取第1個和第2個記錄,但沒有更多!期望值(這是我們使用VB6的經驗)是,您應該能夠讀取除鎖定的記錄以外的所有記錄。
有沒有人看到這個問題?我在做什麼奇怪的事情?任何工作?
演示代碼:
程序1,創建/打開/鎖定
Sub Main()
Dim FileName As String = "test.a"
Dim ListofName() As String = {"Name1", "Name2", "Name3", "Name4",
"Name5", "Name6", "Name7", "Name8", "Name9", "Name10"}
Try
Dim FileNumber1 As Integer = FreeFile()
FileOpen(FileNumber1, FileName, OpenMode.Random,
OpenAccess.ReadWrite, OpenShare.Shared, 600)
FileGet(FileNumber1, People, 1)
'Create File if needs be
If People.Name = "" Then
For A = 1 To 10
People.Name = ListofName(A - 1)
FilePut(FileNumber1, People, A)
Next
End If
'Lock the recoard we want for testing
Lock(FileNumber1, 9)
Catch ex As Exception
FileClose()
End Try
FileClose()
End Sub
_
計劃2打開,並嘗試閱讀
Sub Main()
Dim FileName As String = "C:\**Location of first program file**\test.a"
Try
Dim FileNumber1 As Integer = FreeFile()
FileOpen(FileNumber1, FileName, OpenMode.Random,
OpenAccess.ReadWrite, OpenShare.Shared, 600)
FileGet(FileNumber1, People, 2)
'See how much of the file we can read
For A = 1 To 10
FileGet(FileNumber1, People, A)
System.Diagnostics.Debug.WriteLine(People.Name.ToString)
Next
Catch ex As Exception
FileClose()
End Try
FileClose()
End Sub
編輯0.1:我們發現單個記錄被鎖定在文件中的越深,在被鎖定的文件之前無法訪問的字節/記錄越多。
urg ...開始使用System.IO。無論如何,文件並不總是「完全」寫入,你需要關閉或刷新流。 –
爲什麼選擇vb6標籤? vb6!= vb.net。 –
可能是兼容庫中的一個bug;有記錄的行爲是爲了鎖定鎖定單個記錄。 – Craig