本质上,我有与此海报相同的问题,但在 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。