Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何知道另一个进程是否正在使用文件的文件夹?_C#_.net_Io_Filesystems - Fatal编程技术网

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

C# 如何知道另一个进程是否正在使用文件的文件夹?,c#,.net,io,filesystems,C#,.net,Io,Filesystems,我知道已经有几十个关于“文件被另一个进程使用”的问题了。但它们都有一个问题,即试图读取或写入另一个进程已经在使用的文件。我只想检查一个文件是否正在被另一个进程使用(之后没有IO操作)。 我在别处没有找到答案。 那么,我如何知道一个文件或文件夹是否正在被C#中的另一个进程使用?正如您在问题中所描述的,唯一的方法是尝试先打开该文件,看看它是否正在被另一个进程使用 您可以使用我以前实现的这种方法,其思想是如果文件存在,则尝试以“打开写入”方式打开该文件,因此如果失败,则该文件可能被另一个进程使用: p

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

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

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

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

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

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

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:是的,但其思想是不会抛出异常“告诉我们该文件正被另一个进程使用”。但是请注意,该文件可能在检查之后和实际打开的文件代码“在纳秒内”之前被使用。但是我们减少了可能性。这是一个好方法,谢谢。但最简单的方法是,几乎每个人都会首先想到它。我只是想看看在.NET中是否有任何规范的方法来实现它。但是非常感谢您的帮助。当我查看其他线程时,似乎唯一的方法是尝试在try-catch块中打开该文件,并检查异常类型是否已锁定。虽然该文件可能仍在使用中,但只有另一个进程允许共享写访问。@Chris Chilvers:是的,但其思想是不会抛出异常“告诉我们该文件正被另一个进程使用”。但是请注意,该文件可能在检查之后和实际打开的文件代码“在纳秒内”之前被使用。但是我们减少了可能性。可能的重复