C# FileSystemWatcher-只触发一次更改事件?

C# FileSystemWatcher-只触发一次更改事件?,c#,.net,file-io,C#,.net,File Io,我正在使用下面的代码侦听从服务器下载并打开的文件的更改事件。但是,更改事件仅在第一次保存文件时触发,然后在后续保存时,文件监视程序不会触发更改事件 有人知道发生了什么事吗 private FileSystemWatcher StartWatchingFile() { fw = new FileSystemWatcher(); fw.Path = this.directoryLocation; fw.Filter = this.Filename; fw.Notif

我正在使用下面的代码侦听从服务器下载并打开的文件的更改事件。但是,更改事件仅在第一次保存文件时触发,然后在后续保存时,文件监视程序不会触发更改事件

有人知道发生了什么事吗

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中,ArrayList是类的公共成员

问候,


乔恩:它总是第一次起作用,这是可以复制的吗

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


如果是这样,您启动的进程是否可能会锁定该文件,从而使该文件实际上不会被修改?

很抱歉,我无法具体回答您的问题。总的来说,如果您充分使用它,我将对此做出贡献,您将了解到FileSystemWatcher是不可靠的。Microsoft Connect与它一起展示。我同意。

您发布的代码没有捕获重命名或删除的事件。我认为文件没有被重命名或删除?我现在将整个类保存在另一个类的变量中,这样它就不会被垃圾收集,但它仍然只触发一次。我认为你对文件被打开它的应用程序锁定的看法是正确的,但是为什么文件监视程序只在第一次保存时启动?我不认为它会被收集,因为事件处理程序是对对象的引用…尽管它无论如何应该是类级变量。类级变量应该是什么?我该怎么做?不,是文件系统观察者。如果它是在方法之外使用/引用的,您可能应该将其提升到类定义中。我知道你已经这么做了。你建议用什么根?场景是我从服务器下载一个文件,允许用户编辑。一旦用户完成编辑,修改后的文件必须再次上传到服务器,而无需用户进行任何输入。捕获的问题是用户可以关闭文件,但不能关闭编辑它的程序?谢谢你的输入。我无法在知情的情况下回答其他编辑软件对你需要上传的文件有锁定(或其他什么)的问题。但是,关于“监视”文件的更改,我会轮询文件系统,并将您以前看到的内容(上次修改的时间戳、文件大小等)与您现在看到的内容进行比较,以及在您看到要查找的更改时“上载到服务器”。它很难看,但很可靠。