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); } 

编辑:StartWatchingFile()现在返回filewatcher,它保存在一个不会被垃圾收集的类中,只是为了确保我持有整个类,因为可能无法调用fw_changed()函数。 所以整个class级现在都没有收集垃圾。 该类保存在ArrayList中,该列表是类的公共成员

问候,

乔恩

对不起,我不能具体回答你的问题。 一般来说,我会做出贡献,如果你足够使用它,你会发现FileSystemWatcher不可靠。 Microsoft Connect显示了多个问题 。 我同意Jason Jackson对FileSystemWatcher的看法 。

可重现的是它总是第一次起作用吗?

如果没有,在StartWatchingFile完成后,垃圾收集器可能已经收集了FileSystemWatcher ,因为它是在本地声明的。

如果是这样,您启动的进程是否可能会锁定文件,因此文件实际上没有被修改?