我正在使用以下代码来监听我从服务器下载并打开的文件的更改事件。但是更改事件仅在第一次保存文件时被触发,然后在后续保存时文件观察者不会触发更改事件?
有人能看到最新情况吗?
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()函数可能无法调用。所以整个班级现在都没有收集垃圾。该类保存在ArrayList中,该列表是类的公共成员
此致
乔恩
答案 0 :(得分:1)
第一次始终是否可以重现?
如果没有,那么在FileSystemWatcher
完成后,垃圾收集器可能已经收集了StartWatchingFile
,因为它是在本地声明的。
如果是这样,您启动的进程可能会锁定文件,以便实际上不修改文件吗?
答案 1 :(得分:1)
对不起,我不能具体回答你的问题。一般来说,我会做出贡献,如果你足够使用它,你会发现FileSystemWatcher不可靠。 Microsoft Connect会显示multiple problems。我同意Jason Jackson's take on FileSystemWatcher。