我正在用C#编写一个程序,该程序需要重复访问1个图像文件。在大多数情况下,它都可以工作,但是如果我的计算机运行速度很快,它将在尝试将文件保存回文件系统之前尝试访问该文件,并抛出错误: “文件正在被另一个进程使用” 。
我想找到一种解决方法,但是我所有的Google搜索都只能通过使用异常处理来创建检查。这与我的宗教信仰背道而驰,所以我想知道是否有人能做得更好?
关于此解决方案的更新的注释 :FileAccess.ReadWrite只读文件的“ 检查” 将失败,因此该解决方案已被修改为“”进行检查FileAccess.Read。尽管此解决方案有效,因为FileAccess.Read如果文件上具有写入或读取锁定,尝试进行检查将失败,但是,如果文件上没有写入或读取锁定(即已打开),则此解决方案将不起作用(用于读取或写入)具有FileShare.Read或FileShare.Write访问权限。
FileAccess.ReadWrite
FileAccess.Read
原文: 我在过去的几年中一直使用此代码,但至今没有任何问题。
了解您对使用异常的犹豫,但是您无法始终避免使用它们:
protected virtual bool IsFileLocked(FileInfo file) { try { using(FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None)) { stream.Close(); } } 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; } //file is not locked return false; }