1


0

私はサーバーからダウンロードして開くファイルの変更イベントを監視するために以下のコードを使用しています。 しかし、changeイベントはファイルが最初に保存されたときにのみ起動され、その後の保存時にファイルウォッチャーはchangeイベントを起動しませんか?

誰が何が起こっているのを見ることができますか?

private FileSystemWatcher StartWatchingFile(){fw = new FileSystemWatcher(); fw.Path = this.directoryLocation; fw.Filter = this.Filename;

fw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;

//イベントハンドラを追加するfw.Changed = new FileSystemEventHandler(fw_Changed);

//ファイルSystem.Diagnostics.Process.Start(this.CreateAbsoluteFilePath(this.Filename))を開きます。

//見始めます。 fw.EnableRaisingEvents = true;

fwを返す。 }

//************************

void fw_Changed(オブジェクトセンダ、FileSystemEventArgs e){MessageBox.Show( "File:" e.FullPath "" e.ChangeType); }

編集:StartWatchingFile()は、fw_changed()関数を呼び出すことができない可能性があると考えてクラス全体を保持していることを確認するために、ガベージコレクションされないクラスに保持されるファイルウォッチャーを返すようになりました。 そのため、クラス全体がガベージコレクションされていません。 クラスは、クラスのパブリックメンバーであるArrayListに保持されています。

よろしく、

ジョン

2 Answer


1


常に動作するのは再現可能ですか?

そうでなければ、 FileSystemWatcher`はローカルで宣言されているので StartWatchingFile`が終了した後の間にガベージコレクタによって集められたかもしれません。

もしそうなら、あなたが始めているプロセスはおそらくファイルが実際には変更されないようにファイルをロックしていますか?


1


申し訳ありませんが、私はあなたの質問に具体的に答えることができません。 一般的に言って、私はあなたがそれを十分に使うならば、FileSystemWatcherが信頼できないということを学ぶでしょう。 Microsoft Connectは 複数の問題を表示します。 私は ジェイソンジャクソンのFileSystemWatcherへの取り組みに同意します。