有没有更好的方法来检查文件是否未被锁定然后打开文件以捕获异常.我在目录上运行了一个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; }
}
一位小专家就最佳方式提出建议.谢谢
该文件正被复制到监视目录中.没有其他用户可以访问该目录.我只需要验证文件是否完全复制到我处理的目录中并自行移动文件.我需要独家访问它.
你经常这样做多久一次?把它放在上下文中,假设您每50毫秒检查一次 - 这是非常频繁的.我的笔记本电脑(我上次检查过)每毫秒可以抛出超过100个例外...所以抛出异常的成本将低于总时间的0.02% - 而且假设它总是很忙!
现在,拥有一个API以避免这种情况肯定会很好 - 一种TryOpenFile
- 但在它缺席的情况下,我只是把它放在另一个函数中而不用担心.
但请记住,如果你只是返回一个布尔值,那么你的数据一旦返回就会陈旧 - 另一个进程可以在你返回"它没关系"后立即获取一个独占锁.为避免这种情况,您应该考虑返回开放流.