【问题标题】:FileSystemWatcher - only the change event once firing once?FileSystemWatcher - 只有一次触发一次更改事件?
【发布时间】:2009-08-21 19:56:30
【问题描述】:

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

谁能看到发生了什么?

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() 现在返回文件监视程序,该文件监视程序保存在一个不会被垃圾收集的类中,只是为了确保我持有整个类,因为认为 fw_changed() 函数可能无法实现叫。所以整个班级现在都没有被垃圾收集。该类保存在一个 ArrayList 中,它是类的公共成员

问候,

乔恩

【问题讨论】:

  • 您发布的代码没有捕捉到 Renamed 或 Deleted 事件。我认为文件没有被重命名或删除?

标签: c# .net file-io


【解决方案1】:

很抱歉,我无法具体回答您的问题。一般来说,我会做出贡献,如果你用得够多,你会发现 FileSystemWatcher 并不可靠。 Microsoft Connect 显示multiple problems。我同意Jason Jackson's take on FileSystemWatcher

【讨论】:

  • 您建议使用什么根目录?场景是我从服务器下载一个文件,用户可以编辑该文件。一旦用户完成编辑,修改后的文件必须再次上传到服务器,而无需用户的任何输入。捕获的是用户可以关闭文件但不能关闭它编辑的程序?感谢您的意见。
  • 对于其他编辑软件对您需要上传的文件具有锁定(或其他)的担忧,我无法明智地谈论。但是,关于“监视”文件的更改,我会轮询文件系统并将您之前看到的内容(最后修改的时间戳、文件大小等)与您现在看到的内容进行比较,并在您看到更改时“上传到服务器”你在找。它很丑,但很可靠。
【解决方案2】:

第一次总是可以重现吗?

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

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

【讨论】:

  • 我现在将整个班级放在另一个班级的变量中,这样它就不会被垃圾收集,但它仍然只会触发一次。我认为您对文件被打开它的应用程序锁定的权利是正确的,但为什么文件观察器只在第一次保存时触发?
  • 我不认为它会被收集,因为事件处理程序是对对象的引用。
  • ...虽然它应该是一个类级别的变量。
  • 事件处理程序的类级变量应该是什么?我该怎么做?
  • 不,FileSystemWatcher。如果它在方法之外被使用/引用,您可能应该将它提升到类定义中。我看到你已经这样做了。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
相关资源
最近更新 更多