【问题标题】:Which filter of FileSystemWatcher do I need to use for finding new files我需要使用哪个 FileSystemWatcher 过滤器来查找新文件
【发布时间】:2012-06-17 15:02:57
【问题描述】:

到目前为止,我知道 FileSystemWatcher 可以查看文件夹,如果该文件夹中的任何文件被更改、修改等......那么我们可以处理它。 但我不确定在我的场景中应该使用哪个过滤器和事件:监视文件夹,如果将文件添加到该文件夹​​,则执行 XYZ ... 所以在我的场景中,我不在乎现有文件是否已更改等..那些应该被忽略...只有当且仅当新文件已添加到该文件夹​​时才执行 XYZ...

对于这种情况,您建议使用哪种事件和过滤器?

【问题讨论】:

    标签: c# filesystemwatcher


    【解决方案1】:

    设置观察者:

    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = "Blah";
    
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
        | NotifyFilters.FileName;
    
    watcher.Created += new FileSystemEventHandler(OnChanged);
    
    watcher.EnableRaisingEvents = true;
    

    然后实现FileCreated委托:

    private void OnChanged(object source, FileSystemEventArgs e) {
        Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }
    

    【讨论】:

    • 如果我们只关心文件的创建而不是更改,为什么还要设置NotifyFilter
    • @JeffBridgman 这并不直观,但 NotifyFilter 可用作微调来自 FileSystemWatcher 的通知的一种方式。默认情况下,NotifyFilter 设置为 DirectoryName |文件名 |最后写。这些使您能够从 FileSystemWatcher 中获取您期望的核心文件活动:创建、更改、删​​除和重命名。可以更改通知过滤器以增加将被监视并用作触发各种事件的输入的文件/目录属性的范围。尽管您可以推测,大多数其他过滤器只会导致“已更改”事件。
    【解决方案2】:

    FileSystemWatcher的详细解释请看这里:http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

    如果要查找添加的文件,则必须查找已创建的文件。

    您可以通过设置 WatcherChangeType 枚举的值来指定要监视的更改类型。可能的值如下:

    • 全部:文件或文件夹的创建、删除、更改或重命名。
    • 已更改:文件或文件夹的更改。更改的类型包括:大小、属性、安全设置、上次写入和上次访问时间的更改。
    • 已创建:创建文件或文件夹。
    • Deleted:删除文件或文件夹。
    • 重命名:文件或文件夹的重命名。

    您也可以只连接在创建(添加)文件时触发的事件处理程序,而不实现所有其他事件,因为它们对您不感兴趣:

    watcher.Created += new FileSystemEventHandler(OnChanged);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2011-05-06
      • 1970-01-01
      • 2016-09-06
      • 2021-08-24
      相关资源
      最近更新 更多