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

标签 c# .net vb.net file-io

有没有更好的方法来检查文件是否未锁定然后打开文件以捕获异常。我有一个在目录上运行的 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/

相关文章:

vb.net - SSRS 自定义代码错误 : expression expected

c# - 工厂模式返回需要其他已创建对象的对象

c# - 如何创建保证无效的完整路径

c# - SQL Server View ,它会自行更新,还是需要我创建一个新 View ?

c# - 如何使用 foreach() 和 ftpwebrequest 优化我的 FTP 下载?

javascript - Web 浏览器控件 - 依次导航至 URL

c# - 如何在 AutoMapper 中全局使用忽略?

.net - 运行 Windows 应用程序的 Docker

.net - 第一次从代码访问windows文件夹

vb.net - 如何最小化和恢复大量实例的进程?