FileSystemWatcherのChangeイベントって複数回発生するのね
Webカメラが保存する画像ファイルを見張っておいて、その画像ファイルが更新されたタイミングでそのファイルをFTPでアップロードするアプリケーションをざくっと作成した。画像ファイルの変更を見張るのはFileSystemWatcherのChangeイベントを使えば簡単にできると思っていた・・・のだが、このChangeイベントが1度の画像ファイルの更新にもかかわらず、複数回発生するのだった。思わぬところでハマってしまいました。
で、ネットを探すと既知のことで、ファイルを保存するアプリケーションが何度かに分けて書き込むためにChangeイベントが複数発生するのは仕方のないということでした。
でも、だからどうしろ?っていう回答はほとんど無いのね・・・
しょうがないのでChangeイベントが発生してから10秒間は次のChangeイベントが発生しても無視するようにしました。これしかないんじゃないかと思います。
/// <summary> /// 監視しているファイルが更新された際のイベントハンドラ /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void fswatcher_Changed(object sender, FileSystemEventArgs e) { try { this.uploading = true; FileInfo fi = new FileInfo(e.FullPath); //イベントが続けて発生する場合があり、何度もファイルに書き込んでいる可能性があるため、最初のイベントのみアップするようにする。 if (fi.LastWriteTime.Subtract(lastWriteTimeSav).Seconds < 10) return; ・ ・ ・