基本的に、このポスターと同じ問題がありますが、C# で:ファイルが Win32 で読み取り可能になるまで待機しています
詳細情報:File.Open
プロジェクトの 1 つを呼び出すコードがありますが、ファイルが別のプロセス ( EDIT:またはスレッド)によって既に開かれている場合、時々死ぬことがあります。
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
、アクセスできません。コードはコンパイルされません。.NET の別の部分にアクセスする別の方法はありHResult
ますか?
最後にもう 1 つ注意点があります。それは非常識です。Visual Studio 2005 と .NET 2.0 しか使用できません。