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

Posted

技术标签:

【中文标题】当从不同的计算机进行更改时,C# FileSystemWatcher 不会在 Nas 文件系统上触发【英文标题】:C# FileSystemWatcher not firing on Nas file system when making change from different computer 【发布时间】:2021-12-22 19:53:52 【问题描述】:

我让多台计算机(centos)安装了一个 NAS 文件系统(Apsara File Storage)。 然后我使用 c# FileSystemWatcher 来监视文件创建/更新更改。 FileSystemWatcher 事件仅在运行程序本身的计算机进行更改时触发。 附言。我试过 .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; 
            ....

【问题讨论】:

documentation 确实说“远程计算机必须安装所需的平台之一,组件才能正常运行。”但未能列出或链接到所需的平台。 【参考方案1】:

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

How reliable is the FileSystemWatcher in .netFramwork 4? FileSystemWatcher vs polling to watch for file changes C# FileSystemWatcher watch changes on network drive which is only done by current system 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 的文章非常详细地描述了这些限制,并提供了更可靠的解决方案。

【讨论】:

以上是关于当从不同的计算机进行更改时,C# FileSystemWatcher 不会在 Nas 文件系统上触发的主要内容,如果未能解决你的问题,请参考以下文章

当从 GeometryReader 中进行更改时,SwiftUI 不会反映对 @Binding @State 变量的更改

当从同一个组件调用时,两个 IBAction 触发的顺序是啥?

当从执行路径更改的表单中触发取消按钮时,组件更改会暂时暂停?

当从另一个 ObservedObject 链接到 Published 属性时,视图不会对更改做出反应

React Native刷新屏幕/组件/更改状态

C#中“类似GridView等控件”的前台显示与后台数据变化之间的关系