2

Excel ファイルがいつ更新されるかを把握するためのユーティリティを作成しました。更新が行われると、同じ Excel ファイルを読み取る必要があります。ただし、更新については通知されませんが、代わりに一時ファイルの作成が通知されます (これは役に立ちません)。C# Windows 形式で行うにはどうすればよいですか?

使用したコード スニペットは次のとおりです。

                  watcher.EnableRaisingEvents = true;
                  watcher.Filter = "*.xlsx";
                  watcher.NotifyFilter =  NotifyFilters.LastWrite;
                  watcher.Path = "G:\\Prerequisites Folder";
                  watcher.SynchronizingObject = this;
                  watcher.Changed += new FileSystemEventHandler(watcher_Changed);

           void watcher_Changed(object sender, FileSystemEventArgs e)
           {

            if (e.Name.StartsWith("~") == false)
                  btnRefreshPrequisites_Click(null, null);
            }

私が見逃しているものはありますか?

4

2 に答える 2

3

これは設計によるものであり、多くのプログラムに共通のアプローチです。ファイルを変更するとき、何らかの理由で変更が失敗した場合に、変更によって元のファイルが破壊されないようにします。そのため、元のファイルを一時的な名前にコピーし、その一時ファイルに変更を加えます。そして、何も問題がなければ、元の名前を変更し、一時的な名前を元の名前と同じ名前に変更し、最後に名前を変更した元の名前を削除します。

そのため、Renamed イベントにも関心を持つ必要があります。

于 2012-06-01T12:27:34.373 に答える
0
void watcher_Changed(object sender, FileSystemEventArgs e)
       {
        //no need to check if (e.Name.StartsWith("~") == false)
         // comment the if statement
        if (e.Name.StartsWith("~") == false)
              btnRefreshPrequisites_Click(null, null);

         //do your work
        }
于 2012-06-01T11:02:03.120 に答える