我正在努力改善一个老班,我被困在这里。
这样的方法有效。
Private Database_Bytes As Byte()
Private Base as String = 'Path of Some database file.
Sub New()
If File.Exists(Base) Then
FileOpen(1, Base, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared)
Dim asi As String = Space(LOF(1))
FileGet(1, asi)
FileClose(1)
Database_Bytes = Encoding.Default.GetBytes(asi)
End If
'Operations
End Sub
由于FileOpen已经过时且IO Class提供了更好的性能,我试图将其更改为以下方法但是。如果该文件正由另一个进程使用,我会收到IOException。
Private Database_Bytes As Byte()
Private Base as String = 'Path of Some database file.
Sub New()
If File.Exists(Base) Then
Database_Bytes = IO.File.ReadAllBytes(Base)
End If
'Operations
End Sub
如果文件正在使用,我该如何避免IOException?
答案 0 :(得分:0)
如您所知,File.ReadAllBytes不允许您读取正在使用的文件。但是,您可以使用FileStream.Read。
执行此操作Private Database_Bytes As Byte()
Private Base as String = "Path of Some database file."
Sub New()
If File.Exists(Base) Then
Using fs As New FileStream(Base, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
ReDim Database_Bytes(CInt(fs.Length) - 1)
fs.Read(Database_Bytes, 0, Database_Bytes.Length)
End Using
End If
'Operations
End Sub
上面的代码假设您有Imports System.IO
(根据您发布的代码似乎就是这种情况)。否则,File.Exists
,FileStream
等需要合格(例如IO.File.Exists
等)。