Filesystemwatcher 没有在看子目录

Posted

技术标签:

【中文标题】Filesystemwatcher 没有在看子目录【英文标题】:Filesystemwatcher is not watching subdir 【发布时间】:2021-10-11 15:49:03 【问题描述】:

我正在尝试使用 Docker 卷中的 FileSystemWatcher 监视文件夹中创建/删除/重命名的所有文件。它正在获取正在监视的根目录(大部分时间)上的事件,但即使 IncludeSubdirectories = true,子目录中的任何内容都不会触发事件。观察者被保存为道具。我怎样才能让它观看子目录并触发所有事件,而不仅仅是大多数事件?

    public void StartMonitorService()
    
        Watcher = new FileSystemWatcher(@"/var/lib/docker/volumes/monitor");
        Watcher.NotifyFilter = NotifyFilters.Attributes
                             | NotifyFilters.CreationTime
                             | NotifyFilters.DirectoryName
                             | NotifyFilters.FileName
                             | NotifyFilters.LastAccess
                             | NotifyFilters.LastWrite
                             | NotifyFilters.Security
                             | NotifyFilters.Size;

        Watcher.Created += OnCreated;
        Watcher.Deleted += OnDeleted;
        Watcher.Renamed += OnRenamed;

        Watcher.Filter = "";
        Watcher.IncludeSubdirectories = true;
        Watcher.EnableRaisingEvents = true; 
    

【问题讨论】:

【参考方案1】:

我没有完全解决我的问题,但我可以为任何可能遇到与我相同的问题的人提供解决方法。

private void OnCreated(object sender, FileSystemEventArgs e)

    if (Directory.Exists(e.FullPath))
    
        string dirRoot = e.FullPath;
        DateTime lastTimeWriten = Directory.GetLastWriteTime(dirRoot);
        while (true)
        
            Thread.Sleep(30000);
            if (lastTimeWriten == Directory.GetLastWriteTime(dirRoot))
                break;

            lastTimeWriten = Directory.GetLastWriteTime(dirRoot);
        
        HashSet<string> fileSet = new HashSet<string>(Directory.GetFileSystemEntries(dirRoot, "*", SearchOption.AllDirectories));
        ...
        _messageService.SendNewSurveyMessage(newSurveyFileSet);
    

【讨论】:

以上是关于Filesystemwatcher 没有在看子目录的主要内容,如果未能解决你的问题,请参考以下文章

FileSystemWatcher不会使用'mv'命令检测移动到目录中的文件,也不会在ubuntu上剪切和粘贴

使用filesystemwatcher时怎么处理大文件

FileSystemWatcher 监控目录大小

FileSystemWatcher用法详解

FileSystemWatcher用法详解

用FileSystemWatcher对象监控C#目录改变