摘要:在.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