如果在调用之间没有足够的间隔调用两次FileReadAllBytes会导致IOException吗?
当我设置网格的Row和Col时,它会触发RowColChange事件。 RowColChange有一些代码,它使用File.ReadAllBytes打开同一个文件。 据我所知,ReadAllBytes在内部使用FileStream使用,因此文件流在使用后会关闭。但是有可能在告诉操作系统文件被释放时有一些延迟 因此,后续使用File.ReadAllBytes可能会失败并引发异常。 有什么想法吗?谢谢!
grid.Row = 0
grid.Row = 1
grid.Col = 3
Private Sub grid_RowColChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles grid.RowColChange
'Is it possible to get IOException saying the process can't access the file because it is being used by another process.
Display(File.ReadAllBytes(filePath))
End Sub
答案 0 :(得分:2)
请尝试以下方法:
Using fileStream = New FileStream("path", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Using streamReader = New StreamReader(fileStream)
Dim content = streamReader.ReadToEnd()
End Using
End Using
实际上可能有两个线程从同一个文件中读取同一个文件,请尝试使用上面的代码来读取该文件。
答案 1 :(得分:1)
在this answer的基础上以及File.ReadAllBytes
将FileShare.Read
标记与FileAccess.Read
(reference)结合使用的事实,对{{1}的并发调用在同一个文件上永远不会抛出“由另一个进程使用”File.ReadAllBytes
,除非另一个进程已经使用写锁定打开它 - IOException
拒绝写入,因此会失败。
如果由于并发写入而看到异常,那么是的,您有选项:
等待并重试。这里有关于此方法的很好的报道,例如this one
打开FileShare.Read
并指定FileStream
,detailed here