如何知道某个文件夹的文件是否正在被另一个进程使用?

发布于 2024-11-17 13:50:19 字数 152 浏览 2 评论 0原文

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

I know there are tens of questions already about "the file being used by another process". But they all have the problem of trying to read a file or write to a file that is already being used by another process. I just want to check to see if a file is being used by another process (no IO action after that).
I didn't find the answer elsewhere.
So, how can I know if a file or folder is being used by another process in C#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

养猫人 2024-11-24 13:50:19

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

您可以使用我之前实现的这个方法,其想法是如果文件存在,则尝试以打开写入方式打开该文件,因此如果失败,则该文件可能被另一个进程使用:

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);
    }
}

As you describe in the question the only way is to try to open the file first to see if it used by another process.

You can use this method I implemented sometime ago, the idea is if the file exists then try to open the file as open write, and so if failed then the file maybe is used by another process:

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);
    }
}
无名指的心愿 2024-11-24 13:50:19

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

如何检查文件锁定?

This post might help:

How to check for file lock?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文