使用IO.File Class读取正在使用的文件

时间:2016-01-15 08:18:25

标签: vb.net

我正在努力改善一个老班,我被困在这里。

这样的方法有效。

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?

1 个答案:

答案 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.ExistsFileStream等需要合格(例如IO.File.Exists等)。