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

时间:2013-05-27 10:36:49

标签: c# stream

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

我试过了:

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

但即使该文件已打开returns 0

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

我可以写什么?

谢谢! 格雷斯

2 个答案:

答案 0 :(得分:2)

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

Process[] pList = Process.GetProcessesByName("notepad");
foreach(Process p in pList)
{
    if(p.MainWindowTitle.Contains("MyFilename.txt")
       ......
}

当然,这不是一个愚蠢的解决方案。我可以用写字板或其他文本编辑器打开文件,如果没有锁,我们又有同样的问题

但是,如果您成功完全打开该文件,那么保存其更改是一个记事本问题

答案 1 :(得分:1)

是的,有一种方法可以使用FileStream

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