当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在没有TryCatch的情况下检查文件锁定》经验,为你挑选了1个好方法。

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

}

一位小专家就最佳方式提出建议.谢谢

该文件正被复制到监视目录中.没有其他用户可以访问该目录.我只需要验证文件是否完全复制到我处理的目录中并自行移动文件.我需要独家访问它.



1> Jon Skeet..:

你经常这样做多久一次?把它放在上下文中,假设您每50毫秒检查一次 - 这是非常频繁的.我的笔记本电脑(我上次检查过)每毫秒可以抛出超过100个例外...所以抛出异常的成本将低于总时间的0.02% - 而且假设它总是很忙!

现在,拥有一个API以避免这种情况肯定会很好 - 一种TryOpenFile- 但在它缺席的情况下,我只是把它放在另一个函数中而不用担心.

但请记住,如果你只是返回一个布尔值,那么你的数据一旦返回就会陈旧 - 另一个进程可以在你返回"它没关系"后立即获取一个独占锁.为避免这种情况,您应该考虑返回开放流.


竞争条件乔恩提到你无论如何都必须这样做,所以如果消费者不想知道要处理哪些异常(这是IOException模型的犯罪错误,应该直接使用TryOpenFile)是一个FileLockedException)
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有