一尘不染

有没有办法检查文件是否正在使用?

c#

我正在用C#编写一个程序,该程序需要重复访问1个图像文件。在大多数情况下,它都可以工作,但是如果我的计算机运行速度很快,它将在尝试将文件保存回文件系统之前尝试访问该文件,并抛出错误:
“文件正在被另一个进程使用”

我想找到一种解决方法,但是我所有的Google搜索都只能通过使用异常处理来创建检查。这与我的宗教信仰背道而驰,所以我想知道是否有人能做得更好?


阅读 228

收藏
2020-05-19

共1个答案

一尘不染

关于此解决方案的更新的注释FileAccess.ReadWrite只读文件的“ 检查”
将失败,因此该解决方案已被修改为“”进行检查FileAccess.Read。尽管此解决方案有效,因为FileAccess.Read如果文件上具有写入或读取锁定,尝试进行检查将失败,但是,如果文件上没有写入或读取锁定(即已打开),则此解决方案将不起作用(用于读取或写入)具有FileShare.Read或FileShare.Write访问权限。

原文: 我在过去的几年中一直使用此代码,但至今没有任何问题。

了解您对使用异常的犹豫,但是您无法始终避免使用它们:

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;
}
2020-05-19