本质上,我有与此海报相同的问题,但在 C# 中:等待文件可用于 Win32 读取
更多信息:我们有在我们的一个项目中调用File.Open的代码,当文件已经被另一个进程(编辑:或线程)打开时,偶尔会死掉:
FileStream stream = File.Open(m_fileName, m_mode, m_access);
/* do stream-type-stuff */
stream.Close();
File.Open将抛出一个IOException(目前在某处被悄悄吞下),其HResult属性为0x80070020( ERROR_SHARING_VIOLATION)。我想做的是:
FileStream stream = null;
while (stream == null) {
try {
stream = File.Open(m_fileName, m_mode, m_access, FileShare.Read);
} catch (IOException e) {
const int ERROR_SHARING_VIOLATION = int(0x80070020);
if (e.HResult != ERROR_SHARING_VIOLATION)
throw;
else
Thread.Sleep(1000);
}
}
/* do stream-type-stuff */
stream.Close();
但是,HResult是 的受保护成员Exception,无法访问 - 代码无法编译。是否有另一种方法可以访问HResult.NET 的另一部分,或者可能是我可以用来做我想做的事情的另一部分?
哦,最后一个警告,这很糟糕:我仅限于使用 Visual Studio 2005 和 .NET 2.0。