关于c#:检查文件是否正在使用中

Check if file is in use

本问题已经有最佳答案,请猛点这里访问。

嗨,伙计们,我需要帮助。我试图同时从多个客户机打开一个服务器上的文本文件,这样在读取时就不会锁定该文件。这样地:

1
2
3
4
new StreamReader(File.Open(logFilePath,
                       FileMode.Open,
                       FileAccess.Read,
                       FileShare.ReadWrite))

现在我正试图检查这个文件是否被任何客户机使用(因为我想给它写些新的东西),但是因为我在读取它时没有锁定它,所以我不知道该怎么做。我无法尝试打开并捕获异常,因为它将打开。


你能试试这个吗?

或者看这里已经问过这个问题->有没有办法检查文件是否在使用中?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
protected virtual bool IsFileLocked(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 locked
    return false;
}

I can't try to open and catch an exception because it will open

为什么?以这种方式工作是很有价值的选择。

另外,您还可以创建一些空的预定义文件,例如"access.lock",以及其他文件,以便了解实际文件是否被锁定。请检查是否存在锁定文件:

1
2
3
4
if(File.Exist("access.lock"))
  //locked
else
  //write something