我想要建立我自己的平面文件数据库。下面是如何访问平面文件数据库
Dim fs As New System.IO.FileStream("C:\MyDb.txt", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
Dim sr As New System.IO.StreamReader(fs)在处理文件时,.Net是否对使用System.IO.FileShare.Read、System.IO.FileShare.Write和System.IO.FileShare.ReadWrite施加了限制?
我的意思是,.Net能够支持成千上万的用户使用文件流和流读取器对象来并发访问单个文件吗?
发布于 2011-10-07 09:43:43
我不知道.NET/windows的确切限制,所以我为您创建了一个真正的测试。我运行了下面的测试代码几分钟,我发现,直到635908计数的system.io.fileshare使用,它仍然可以使用,也就是说,您仍然可以读取平面数据库文件的内容。
下面是代码(它是一个winform应用程序,.Net 4):
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim filepath As String = "c:\database.txt"
Dim filestream As System.IO.FileStream
Dim count As Int32
For count = 0 To System.Int32.MaxValue
filestream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
AppendLog(count, filestream.ReadByte)
Next
End Sub
Private LogFilepath As String = "C:\LogInfo.txt"
Private Enter As String = Chr(13) & Chr(10)
Private Space As String = " "
Private Sub AppendLog(ByVal Sequence As Int32, ByVal info As Byte)
System.IO.File.AppendAllText(LogFilepath, Enter & Sequence & Space & CStr(info))
End Sub
End Class发布于 2011-08-05 12:03:55
如果您试图打开具有冲突的访问权限和共享权限的文件,它将无法工作。但是,如果这是一个自定义数据库,为什么需要打开多个文件句柄?您的自定义数据库软件应该管理打开的句柄(每个文件有一个)。至于您的具体问题,没有设置限制,但随后打开的文件需要遵循访问和共享权限的规则。
http://msdn.microsoft.com/en-us/library/aa363874%28v=vs.85%29.aspx
发布于 2011-08-05 12:03:38
FileShare成员意味着其他文件也可以打开该文件。这并不保证以任何方式同步数据--这意味着多个程序现在可以在打开文件时从该文件中读取(因为这是您设置的-- FileShare.Read)。
如果您使用ReadWrite,那么多个程序可以从文件中读取和写入文件。同样,如果发生任何更改,将通知而不是。如果多个程序与流同时写入同一个文件,则数据将混合在一起,您将得到一个损坏的文件。(损坏意味着您和其他程序都无法对其进行反编译,因为您的数据与您朋友的应用程序交织在一起)。
对读取文件的并发程序的数量没有不合理的限制。
https://stackoverflow.com/questions/6955792
复制相似问题