FileSystemWatcher中的LastWrite NotifyFilter

时间:2012-05-31 12:07:46

标签: c# excel filesystemwatcher

我编写了一个实用程序来确定何时更新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);
            }

我缺少什么?

2 个答案:

答案 0 :(得分:3)

这是设计,是许多程序的常用方法。在修改文件时,如果文件因任何原因失败,他们会尝试确保这些修改不会破坏原始文件。因此,他们将原始文件复制到临时名称,对该临时文件进行更改。当没有出错时,重命名原件,重命名临时,使其与原件名称相同,最后删除重命名的原件。

所以你也需要对Renamed事件感兴趣。

答案 1 :(得分: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
        }