掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
監視ディレクトリ内でのファイル移動を検出するには? (ID:70358)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>aetos様 >subaru様 レス有難うございます。 >2回目の呼び出しの前にディレクトリハンドルを一旦閉じて 仰るとおりです。非同期でReadDirectoryChangesWを呼んでいますが 結果を取得する辺りは関数化しています。 結果を取得(REMOVE)→ディレクトリハンドルを閉じる→結果を取得(待機) となっていました。 デバッガで、REMOVE時にステートメントをReadDirectoryChangesWに変えた所再びADDが来た為、ハンドルを閉じた事が原因と確定できました。 ですが、まだ問題があります。 RENAMEのように、てっきりNextEntryOffsetで纏めて操作出来るかと思っていましたが 今回のケースでは、NextEntryOffsetは0が為 もう一度ReadDirectoryChangesWを呼ばなければなりません。 しかし、只のREMOVEの場合、その時点で待機をしてしまいます。 aetos様が仰った >このバイト数に達するまで、バッファから繰り返し結果を読み取る必要がありますが、そうやってますか? どは、具体的にはどのような手法でしょうか? 下記が現在私が行っている処理の一部を抜粋したコードです bBufferは1024Byteです ReadDirectoryChangesW( hDir, bBuffer, sizeof(bBuffer), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_DIR_NAME, &dwResultBytes, &overLapped, NULL ); if( !((WaitForMultipleObjects( 2, hEvents, FALSE, INFINITE )) - WAIT_OBJECT_0) ) { bResult = GetOverlappedResult( hDir, &overLapped, &dwResultBytes, TRUE ); i = 0; while(bResult) { pNotifyInfo = (FILE_NOTIFY_INFORMATION *)&bBuffer[i]; if( pNotifyInfo->NextEntryOffset == 0 ) { break; } i += pNotifyInfo->NextEntryOffset; } } CloseHandle( hDir );
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.