ReadDirectoryChangesW
同期的に呼び出してディレクトリを監視しています。新しいファイルが利用可能になると、 と を使用CreateFile
してすぐにアクセスしようとしますが、これにより. 監視対象のディレクトリにファイルを配置するプロセスは、ファイルを読み取ろうとするまでに書き込みを終了しません。GENERIC_READ
FILE_SHARE_READ
ERROR_SHARING_VIOLATION
ファイルが読み取り可能になるまで確実に待機する方法はありますか? メソッドを以下のようなループに入れることができますが、もっと良い方法があることを願っています。
while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_SHARING_VIOLATION)
Sleep (500);
else
break; // some other error occurred
}
if (hFile == INVALID_HANDLE_VALUE)
{
// deal with other error
return 0;
}
ReadFile (...);