8

私はここやウェブ全体でいくつかの「解決策」に出くわしましたが、どれも法案に適合していないようです。

私が探しているのは、アプリに新しいファイルのフォルダーを監視させ(作成、移動、またはコピーのいずれかによって)、それらのオブジェクトに対してアクションを実行させることです。それがシナリオであるため、このアクションを実行するためにFileSystemWatcherクラスを使用しました。

問題は、ファイル全体が作成される前にファイルFileSystemWatcher.Createdイベントが発生することです(大きなファイルのコピーを通して最も顕著に見られます)。

ファイル作成の最初ではなく、最後にこのイベントを発生させる方法はありますか?FileSystemWatcher.NofityFilterプロパティのさまざまな組み合わせを試しましたが、成功しませんでした。

前もって感謝します!:)

4

4 に答える 4

6

私はこの状況に対していくつかの解決策を使用しました。

  1. ファイルの作成者と協力して、ファイルの名前変更スキームを使用できる場合。例えば。作成中にファイルを__Name_として作成し、プロセスの最後に名前をNameに変更すると、イベントが発生し、完全なファイルが作成されます。

  2. トリガーが起動したら、ファイルに対して排他的な読み取り専用ロックを取得できるかどうかを確認します。可能であれば、ファイルへの書き込み操作は完了しています。(私は別の質問でこれについて何かを書きましたフォームアプリケーションとWindowsサービス(または実際には任意のn層)の間で設定を同期させてください

#2のようなものを変更されたイベントに統合すると、結果が得られる可能性があります。

于 2010-08-09T00:45:36.803 に答える
1

うーん、興味深い問題です。大きなファイルを監視している間、オブジェクトを使用したことはありません。少し検索しましたが、1つの解決策は、Changedイベントも監視することだと思われます。ファイルのコピーが完了すると(作成後)、変更されたイベントもスローされるため(ファイルのサイズが大きくなるため)

私がここで読んだものからの詳細:http ://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/f84bb7c8-b7d5-44da-b0f3-6d1a70415d11/

于 2010-08-09T00:22:04.943 に答える
1

私があなたに話そうとしていることはエレガントに見えないことを私は知っています。また、さまざまな場所から届くファイルを監視する必要がありました。ファイルの中には大きいものと小さいものがありました。FileSystemWatcherはこの目的には信頼できないことがわかりました。100%確実にしたい場合は、TimerクラスとそのElapsedイベントを使用して、たまに確認できます。

于 2010-08-09T07:16:34.340 に答える
0

ファイルの作成後にファイルのクローズを追跡する必要がありますが、FileSystemWatcherでそれが可能かどうかは疑問です。FileSystemWatcherで解決策が見つからない場合は、すべての操作をリアルタイムで追跡できるCallbackFilter製品をご覧ください。

于 2010-08-09T07:06:44.540 に答える