有没有更好的方法来检查文件是否未锁定然后打开文件以捕获异常。我有一个在目录上运行的 filewatcher,我需要在文件在该位置完全移动/创建后对文件执行某些操作。抛出异常不会影响性能吗?有没有更好的办法?
Private Function FileAvailable(ByVal fileName As String) As Boolean
Try
Using inputStream As FileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None)
Return True
End Using
Catch ex As IOException
Return False
End Try
End Function
或
private bool FileAvailable(string fileName) {
try {
using (FileStream inputStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None)) {
return true;
}
}
catch (IOException ex) {
return false;
}
}
请教小专家最好的方法。谢谢
正在将文件复制到 watch 目录中。没有其他用户可以访问该目录。在我自己处理和移动文件之前,我只需要验证文件是否已完全复制到目录中。我需要独家访问它。
最佳答案
您打算多久做一次?结合上下文,假设您每 50 毫秒检查一次 - 这非常频繁。我的笔记本电脑(我上次检查时)能够每毫秒抛出 100 多个异常...因此抛出异常的成本将低于总时间的 0.02% - 并且假设它总是忙!
现在,如果有一个 API 来避免这种情况当然会很好 - 一种 TryOpenFile
- 但在没有它的情况下,我只是把它藏在另一个函数中而不用担心。
但是请记住,如果您只是返回一个 bool 值,那么您的数据一返回就过时了——另一个进程可能会在您返回“没关系”后立即获取独占锁。为避免这种情况,您应该考虑返回打开的流。
关于c# - 在没有 Try Catch 的情况下检查文件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547946/