如何最好等待文件锁释放

Tje*_*lle 9 .net c# ioexception filelock

我有一个应用程序,我有时需要从正在写入的文件中读取并因此被锁定.正如我从其他问题中理解的那样,我应该捕获IOException并重试直到我能够阅读.

但我的问题是我如何确定该文件已被锁定,并且它不是另一个IOExcetpion发生的.

Dar*_*rov 5

当您打开一个文件以便在.NET中读取时,它会在某个时候尝试使用CreateFile API函数创建一个文件句柄,该函数设置可用于查看失败原因的错误代码:

const int ERROR_SHARING_VIOLATION = 32;
try
{
    using (var stream = new FileStream("test.dat", FileMode.Open, FileAccess.Read, FileShare.Read))
    {
    }
}
catch (IOException ex)
{
    if (Marshal.GetLastWin32Error() == ERROR_SHARING_VIOLATION)
    {
        Console.WriteLine("The process cannot access the file because it is being used by another process.");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,您无法确定Win32错误是否真的是由CreateFile API调用引起的.这可能会在另一个版本的框架中发生变化.要确定,请自行调用Win32 API. (2认同)