当从不同的计算机进行更改时,C# FileSystemWatcher 不会在 Nas 文件系统上触发

C# FileSystemWatcher not firing on Nas file system when making change from different computer

我让多台计算机(centos)安装了一个 NAS 文件系统(Apsara 文件存储)。 然后我使用 c# FileSystemWatcher 来监视文件 create/update 更改。 FileSystemWatcher 事件仅在运行程序本身的计算机进行更改时触发。 ps。我试过.netcore3.1和.net5版本。

这是我的设置。

           ... 
           using var watcher = new FileSystemWatcher(dir);
           watcher.NotifyFilter = NotifyFilters.Attributes
                             | NotifyFilters.CreationTime
                             | NotifyFilters.DirectoryName
                             | NotifyFilters.FileName;

            watcher.Created += OnCreated;
            watcher.Deleted += OnDeleted;

            watcher.Filter = "*.log";
            watcher.IncludeSubdirectories = true;

            watcher.InternalBufferSize = 8192 * 8;
            watcher.EnableRaisingEvents = true; 
            ....

这个站点上有很多讨论 FileSystemWatcher 可靠性的问题,结论总是一样的:它不可靠。

  • How reliable is the FileSystemWatcher in .netFramwork 4?
  • FileSystemWatcher vs polling to watch for file changes
  • FileSystemWatcher events raising twice despite taking measures against it
  • Why are FileSystemWatcher Attribute changes detected on Windows 7 but not Windows 8?
  • 而且这个清单还在继续……

Peter Meinl 的文章 Tamed FileSystemWatcher 非常详细地描述了这些限制,并提供了更可靠的解决方案。