C# 如何检查文本文件是否正在使用?

C# 如何检查文本文件是否正在使用?,c#,stream,C#,Stream,我有一个文本文件,我想检查它是否已经打开。 问题是,可以多次打开该文件,没有例外 我试过: stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); 也不例外 我也试过了 using (Stream stream = new FileStream("MyFilename.txt", FileMode.Open)) 也不例外 甚至 System.Diagnostics.Process.GetProcesse

我有一个文本文件,我想检查它是否已经打开。 问题是,可以多次打开该文件,没有例外

我试过:

stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
也不例外

我也试过了

using (Stream stream = new FileStream("MyFilename.txt", FileMode.Open))
也不例外

甚至

System.Diagnostics.Process.GetProcessesByName("MyFilename.txt").Length < 1
System.Diagnostics.Process.getProcessByName(“MyFilename.txt”).Length<1
但是,即使文件处于打开状态,
也会返回0

MyFilename.txt
只是一个名称,在真正的代码中,它是真正的文件路径

我能写些什么

谢谢!
Grace

是的,有一种方法可以像

protected virtual bool IsFileUsed(FileInfo file)
{
    FileStream stream = null;

    try
    {
        stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
    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;
    }
    finally
    {
        if (stream != null)
            stream.Close();
    }

    //file is not in use
    return false;
}

如果记事本没有专门锁定文本文件,则需要使用不同的方法

Process[] pList = Process.GetProcessesByName("notepad");
foreach(Process p in pList)
{
    if(p.MainWindowTitle.Contains("MyFilename.txt")
       ......
}
当然,这不是一个愚蠢的解决方案。我可以用写字板或其他文本编辑器打开文件,如果没有锁,我们会再次遇到同样的问题


但是,如果您成功以独占方式打开该文件,则保存其更改是记事本问题

@Rahul:复制粘贴代码时,请确保链接到原始帖子。这里有很多有用的信息-我曾经在我自己的问题中尝试过同样的东西,这就是为什么我在这里提到这些代码。我甚至从你提到的同一篇文章中得到了这些代码。谢谢,但我已经在我的研究中读到了这些。这里没有什么帮助,我想是因为可以多次打开记事本文件。你知道另一种不会锁定的类型吗,比如记事本?对不起,不,这是一种试用的方法