2009-08-21 6 views
1

以下のコードを使用して、サーバーからダウンロードして開くファイルの変更イベントを待ち受けます。しかし、変更イベントは、ファイルが初めて保存されたときにのみ起動され、その後の保存でファイルウォッチャーは変更イベントを起動しません。FileSystemWatcher - 一度起動すると変更イベントのみが表示されますか?

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

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

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

    // Add event handler 
    fw.Changed += new FileSystemEventHandler(fw_Changed); 

    // Open file   
System.Diagnostics.Process.Start(this.CreateAbsoluteFilePath(this.Filename)); 

    // Begin watching. 
    fw.EnableRaisingEvents = true; 

    return fw; 
} 

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

    void fw_Changed(object sender, FileSystemEventArgs e) 
    { 
     MessageBox.Show("File: " + e.FullPath + " " + e.ChangeType); 
    } 

EDIT:StartWatchingFileは()今だけfw_changed()関数ではないかもしれないと思って、私はクラス全体を保持してることを確認するために、ゴミが収集されることはありませんクラスに保たれているfilewatcherを返します。呼び出すことができる。クラス全体でガベージコレクションが行われていません。クラスは

よろしく、

ジョン

+0

あなたが掲示したコードは、名前変更されたイベントや削除されたイベントを捕まえていません。ファイル名が変更されていないか、削除されていませんか? –

+0

これは正しい – Jon

答えて

1

申し訳ありません。あなたの質問に具体的に答えられません。一般的に、私はそれを十分に使用すれば、FileSystemWatcherが信頼できないことに気づくでしょう。 Microsoft Connectにはmultiple problemsが表示されます。私はJason Jackson's take on FileSystemWatcherに同意します。

+0

あなたはどんなルートを提案しますか?このシナリオでは、ユーザーが編集できるサーバーからファイルをダウンロードしています。ユーザーが編集を終了すると、変更されたファイルは、ユーザーからの入力なしにサーバーに再度アップロードする必要があります。キャッチされたのは、ユーザーがファイルを閉じても、編集されたプログラムを閉じることができないということですか?あなたのご意見ありがとうございます。 – Jon

+0

私はアップロードする必要のあるファイルのロック(または何でも)を持っている他の編集ソフトウェアに関する懸念に精通することはできません。しかし、ファイルの変更を監視することについては、ファイルシステムをポーリングし、以前に見たもの(最終更新タイムスタンプ、ファイルサイズなど)と現在のものを比較し、変更を見ると「サーバーにアップロードする」あなたが探していたそれは醜いですが、それは信頼できるものです。 – lance

1

クラスのパブリックメンバーのArrayListに保持されている、それが再現可能な初めてそれが常に作品ということですか?

そうでない場合、StartWatchingFileがローカルで宣言されているため、その間にガベージコレクタによってFileSystemWatcherが収集されている可能性があります。

もしそうなら、実際にファイルがロックされないようにファイルをロックしている可能性がありますか?

+0

私は今、クラス全体を別のクラスの変数で保持しているので、ガベージコレクションは行われませんが、それでも1回だけ発生します。私は、ファイルを開くアプリケーションによってロックされているあなたの権利を考えるが、なぜ最初のファイルウォッチャーの火災だけが保存されますか? – Jon

+0

コードの変更を反映するために質問を更新してください。 – dtb

+0

私はちょうどそれを更新しました – Jon

関連する問題