- - PR -
ファイル監視で稀にイベントが発生しない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-11 14:19
FileSystemWatcherを使用してファイル監視アプリを作成していますが、
稀にFileSystemWatcherのイベントが発生しない場合があります。 MSサイトを調べ、InternalBufferSizeの拡大やイベント処理の短縮なども 行いましたが、解決に至っていません。 過去のログで、FileSystemWatcherの使用をやめ、while文に変更した人も いたようですが、回避策はないでしょうか? ご存知の方がいたら教えてください。 ちなみに、 InternalBufferSizeのサイズは初期値(8K)から256Kまで拡大。 ファイル名は平均25Byte。 イベント時の処理は、作成されたファイルを別フォルダにコピー後、 ファイルの中身をDB登録しています。 | ||||
|
投稿日時: 2006-12-11 14:33
無いと思います。実際、エクスプローラなんかも、時折ファイル更新を取りそびれている気がしますしね・・・・。 定期的なポーリングとFileSystemWatcherの両方を併用して、うまくイベントを取れたらすばやく処理。駄目でも一定時間後にはポーリングで処理するのが良作と思います。 | ||||
|
投稿日時: 2006-12-12 13:51
甕星さん、返答ありがとうございます。
やはり無いのでしょうか。。。 ただ一点気になることがあります。 実は、イベントが発生しない(正確には発生している?)時は必ずファイルコピー処理で ”該当ファイルは別のプロセスが使用中”のエラーになります。 イベント処理では、イベント発生に起因したファイルのみを対象に処理するため、 別々のイベント処理で同一ファイルを操作することは無いはずなので、 別のプロセスが使用中とエラーメッセージが返されるのがわかりません。 過去ログで、ファイル作成は厳密にはファイル作成→削除→ファイル作成と いくつかのコマンドが複合して行われるとありましたが、このあたりが関係しているのでしょうか? | ||||
|
投稿日時: 2006-12-12 14:33
ファイル作成時のイベントについて検証したところ、
やはりファイル作成、ファイル削除、ファイル作成の3つのイベントが 発生していることがわかりました。 これで”該当ファイルは別のプロセスが使用中”とエラーが出た原因と イベントはちゃんと発生していることがわかりましたが、 2回発生するファイル作成イベントを1回だけ処理する(うち1回は無視)方法は 無いでしょうか? 皆さんはどのように対処されているのでしょうか? | ||||
|
投稿日時: 2006-12-12 14:51
FileSystemWatcher は、あくまでトリガーとして扱うようにして、あとは自力で解析とかしています。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-12-12 15:04
そこまで厳密に取得したいのであれば、ファイルシステムフィルタドライバでも作らない限り無理です。FileSystemWacherはイベントを通知するだけで、イベントが届くまでの間にステータスが変化しない事を保障しているわけじゃないですからね。 でも私はドライバを作りたくないので、ポーリング又はイベントで独自に判断処理をいれます。 | ||||
|
投稿日時: 2006-12-12 15:04
じゃんぬねっとさん、返答ありがとうございます。
できることなら全てFileSystemWatcherに頼りたかったんですが、 トリガーとしてまでしか使えないってことですね。 残念。。。 ありがとうございました。 | ||||
|
投稿日時: 2006-12-12 15:16
甕星さん、返答ありがとうございます。
2回中1回のイベントだけを処理したかったのはプロセスエラーを回避させるためで、 多少のステータス相違は許容するつもりでしたが。。。 とりあえず全てを頼れないことがわかったので、 FileSystemWatcher+αで再検討しようと思います。 ありがとうございました。 |
1