发布日期:2018-03-26
有没有办法检查文件是否正在使用?+ 查看更多
有没有办法检查文件是否正在使用?
+ 查看更多
发布日期:2018-02-23 13:55
分类:C#
浏览次数:120
我用c#编写一个程序,需要多次访问一个图像文件。大多数时候它处于工作中,但如果我的电脑运行速度快,它将尝试访问该文件之前已经保存文件系统和抛出一个错误:“文件被另一个进程使用”。
我想找到一个方法,但是我所有的Google搜索只是通过使用异常处理来创建检查。这是违反我的初衷,所以我想知道有没有人有更好的做法?
更新了关于此解决方案的注意事项:使用FileAccess.ReadWrite进行检查将为只读文件失败,因此解决方案已被修改,以便与FileAccess.Read一起检查。 虽然这个解决方案的工作原理是因为尝试检查FileAccess.Read将失败,如果该文件有一个写或读锁定,但是,如果该文件没有写或读锁定,这个解决方案将无法工作,即它已被打开(用于阅读或写入)与FileShare.Read或FileShare.Write访问。
原文:我在过去几年中使用过这个代码,我没有任何问题。
了解你对使用异常的犹豫,但你无法避免他们在任何时间:
protected virtual bool IsFileLocked(FileInfo file) { FileStream stream = null; try { stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); } catch (IOException) { //the file is unavailable because it is: //still being written to //or being processed by another thread //or does not exist (has already been processed) return true; } finally { if (stream != null) stream.Close(); } //file is not locked return false; }