2

コンテキスト:オペレーターのチームは、サードパーティのアプリケーションで最大10GBのサイズの大きなバッチファイルを処理します。各ファイルには数千の画像が含まれており、50の画像ごとに処理した後、保存ボタンを押します。作業場所の電源は信頼できず、保存中に電源が切れると、ファイル全体が破損します。これを克服するために、FileSystemWatcherを使用して保存を検出し、バックアップを作成して、バッチ全体を再処理することなく復元できるようにする小さなユーティリティを作成しています。

問題:FileSystemWatcherはイベントのレポートを非常にうまく処理しますが、特定できない問題があります。監視対象のファイルはサイズが大きいため、保存プロセスには数秒かかります。保存操作が完了したら通知を受け取りたいです。ファイルバッファがディスクにフラッシュされるたびに、不要なイベントがトリガーされるのではないかと思います。保存が進行中であるかどうかに関係なく、ファイルは書き込み用にロックされたままなので、その方法はわかりません。

保存操作中にファイルのバックアップを作成すると、バックアップされたファイルが破損するため、目的が果たせなくなります。

質問:

  • 保存操作の完了後にFileSystemWatcherを使用して通知を受け取る方法はありますか?
  • そうでない場合、ファイルがまだ書き込まれているかどうかを確認するために、他にどのように確実にチェックできますか?

代替案:代替案も歓迎します。

4

1 に答える 1

1

あなたがやろうとしていることを正確に行う直接的な方法は本当にありません。ファイルシステム自体は、保存操作がいつ完了したかを認識していません。論理的には、ユーザーが[保存]ボタンを複数回クリックしたという理由だけで一連の保存と考えることができますが、それはファイルシステムがそれを認識する方法ではありません。アプリケーションが書き込み用にファイルをロックしている限り、ファイルシステムに関する限り、ファイルはまだ保存中です。

あなたがそれについて考えるならば、それは理にかなっています。アプリケーションがファイルへの書き込みアクセスを保持している場合、ファイルシステムは、ファイルが「破損」状態にあるときとそうでないときをどのように認識しますか?ファイルを書き込んでいるアプリケーションだけがそれを知っています。

ファイルを書き込むアプリケーションにアクセスできる場合は、この問題を解決できる可能性があります。それができない場合、ファイルが一定期間変更されていない場合にのみバックアップを作成して、最終変更日で何かを取得できる可能性がありますが、それはバグが多く信頼性が低いことになります。

于 2012-09-19T18:50:45.370 に答える