保存Beyond Compare中的更改不会触发FileSystemWatcher Changed事件

时间:2018-02-15 21:22:54

标签: .net filesystemwatcher beyondcompare

这没有任何意义,但如标题所述,当在FileSystemWatcher监视的文件夹中使用Beyond Compare修改文件时,不会触发Changed事件。

使用Notepad ++修改同一文件时,会触发Changed事件。 我在Beyond Compare中保存时确实验证了该文件实际已被更改,因为我在使用Beyond Compare保存后在记事本中打开它并且更改已存在。

之前遇到过如此奇怪的任何人以及为什么会发生这种情况以及如何在从Beyond Compare保存时触发Changed事件?

与IMO无关的标准FSW代码:

fswDir = new FileSystemWatcher
{
    Path = dirPath,
    NotifyFilter = NotifyFilters.LastWrite,
    Filter = "*.*",
    EnableRaisingEvents = true
};

private void OnFswDirf_Changed(object sender, FileSystemEventArgs e)
{           
    var filePath = e.FullPath;
    // Not executed when file saved by BC, executed when file saved by Notepad++.
}

1 个答案:

答案 0 :(得分:2)

在订阅所有FSW事件和所有NotifyFilter枚举后,我设法获得由Beyond Compare 4 File>保存功能触发的FSW事件的完整序列,以防万一有人在将来需要它:

  1. 已创建:XXXXXX.tmp文件。
  2. 已更改:XXXXXX.tmp文件。
  3. 已更改:XXXXXX.tmp文件。
  4. 已创建:OriginalFileName.ext~XXXXXXXXX.TMP文件。
  5. 已更改:OriginalFileName.ext~XXXXXXXXX.TMP文件。
  6. 重命名:OriginalFileName.ext文件。
  7. 已更改:OriginalFileName.ext~XXXXXXXXX.TMP文件。
  8. 已更改:OriginalFileName.ext文件。
  9. 在消除过程之后,事实证明,为了获得BC NotifyFilter所做的更改,需要设置为:

    NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Attributes;
    

    之后,Changed事件将通过BC捕获文件更改。