У меня, по сути, та же проблема, что и у этого постера, но в 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.