我有一个应用程序,我有时需要从正在写入的文件中读取并因此被锁定.正如我从其他问题中理解的那样,我应该捕获IOException并重试直到我能够阅读.
但我的问题是我如何确定该文件已被锁定,并且它不是另一个IOExcetpion发生的.
当您打开一个文件以便在.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."); } }