【问题标题】:How to know if a folder of file is being used by another process?如何知道一个文件夹是否被另一个进程使用?
【发布时间】:2011-09-23 09:50:56
【问题描述】:

我知道已经有几十个关于“文件被另一个进程使用”的问题。但是它们都存在尝试读取文件或写入已被另一个进程使用的文件的问题。我只想检查一个文件是否正在被另一个进程使用(之后没有 IO 操作)。 我没有在其他地方找到答案。 那么,如何知道某个文件或文件夹是否被 C# 中的另一个进程使用?

【问题讨论】:

标签: c# .net io filesystems


【解决方案1】:

正如您在问题中所描述的,唯一的方法是首先尝试打开文件以查看它是否被另一个进程使用。

你可以使用我之前实现的这个方法,想法是如果文件存在然后尝试以open write的方式打开文件,如果失败则文件可能被另一个进程使用:

public static bool IsFileInUse(string fileFullPath, bool throwIfNotExists)
{
    if (System.IO.File.Exists(fileFullPath))
    {
        try
        {
            //if this does not throw exception then the file is not use by another program
            using (FileStream fileStream = File.OpenWrite(fileFullPath))
            {
                if (fileStream == null)
                    return true;
            }
            return false;
        }
        catch
        {
            return true;
        }
    }
    else if (!throwIfNotExists)
    {
        return true;
    }
    else
    {
        throw new FileNotFoundException("Specified path is not exsists", fileFullPath);
    }
}

【讨论】:

  • 这是个好方法,谢谢。但是最简单的方法,几乎​​每个人都会首先想到它。我只是想看看在.NET 中是否有任何规范的方法可以做到这一点。但是非常感谢您的帮助。
  • 好吧,当我查看其他线程时,似乎唯一的方法是尝试在 try catch 块中打开文件,并检查异常类型以查看它是否被锁定。跨度>
  • 虽然文件可能仍在使用中,只是其他进程允许共享写访问。
  • @Chris Chilvers:是的,但想法是不会抛出异常“让我们知道文件正在被另一个进程使用”。但是请注意,文件可能在检查之后和实际打开文件代码之前“在一纳秒内......”开始使用。但我们减少了可能性。
【解决方案2】:

这篇文章可能会有所帮助:

How to check for file lock?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多