Skip to main content
 首页 » 编程设计

c#之在没有 Try Catch 的情况下检查文件锁定

2024年01月21日27powertoolsteam

有没有更好的方法来检查文件是否未锁定然后打开文件以捕获异常。我有一个在目录上运行的 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 值,那么您的数据一返回就过时了——另一个进程可能会在您返回“没关系”后立即获取独占锁。为避免这种情况,您应该考虑返回打开的流。