FileSystemWatcher IncludeSubdirectories不在网络共享上工作

我正在尝试查看文件夹的网络共享,其中文件已添加到共享以指示上载已完成。 我想使用FileSystemWatcher来监视该触发器文件的该共享及其子目录,如下所示。

FileSystemWatcher fsw = new FileSystemWatcher(share, triggerFilePattern); fsw.IncludeSubdirectories = true; fsw.Created += new FileSystemEventHandler(OnCreated); fsw.Renamed += new RenamedEventHandler(OnRenamed); fsw.Error += new ErrorEventHandler(OnError); 

如果在共享的根目录中创建了文件,则会触发该事件。 如果在共享的子目录中创建了一个文件,则该事件不会触发,也不会出现错误。

如果我为该子目录创建一个新的FileSystemWatcher,那么当我在那里创建一个文件时,我会收到一个事件。 但是,与顶级FileSystemWatcher类似,我不会获取在任何其他子目录中创建的文件的事件。

如果我将网络共享更改为本地目录进行测试,它会按预期工作。

有任何想法吗? 我可以设置一些阻止递归FileSystemWatcher检查的不稳定的网络共享设置吗? 我可以解决这个问题,但不必使代码复杂化会很好。

编辑:我看到我在Properties-> Security选项卡下没有完全控制,所以我认为可能就是这样。 但是我能够在具有相同可见权限的不同共享上获得正常的期望行为,所以我又回到不知道为什么这个特定的共享不起作用。

编辑2:在同事的建议下,我也添加了一个Changed处理程序。 如果没有首先创建文件就可以更改文件是没有意义的,但是…当在子目录中创建文件时,我在相关共享上获得Changed事件。 (重命名时我仍然没有得到任何结果。)这解决了我当前的问题,但是我会打开这个问题以防万一有人能够回答为什么会发生这种情况。

试试这个

  private static FileSystemWatcher fw; static void Main(string[] args) { fw = new FileSystemWatcher(@"D:\Folder_Watch"); fw.IncludeSubdirectories = true; fw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; fw.Created += fw_Created; fw.Changed += fw_Created; fw.Renamed += fw_Created; fw.Filter = "*.*"; fw.EnableRaisingEvents = true; new System.Threading.AutoResetEvent(false).WaitOne(); } static void fw_Created(object sender, FileSystemEventArgs e) { try { fw.EnableRaisingEvents = false; //Your Code } finally { fw.EnableRaisingEvents = true; } } 

我遇到了同样的问题, 通过向共享网络文件夹提供写入权限解决它 (到目前为止它只具有读取权限)。 共享文件夹最初是在Linux上,但是我将它安装在Windows Server 2008 R2上 ,我在那里使用FileSystemWatcher运行程序。