FileSystemWatcher IncludeSubdirectories不在网络共享

时间:2016-03-07 02:08:00

标签: c# filesystemwatcher

我正在尝试为文件添加到共享中的文件夹观看网络共享,以指示上传已完成。我想使用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选项卡下没有完全控制,所以我认为可能就是这样。但是我能够在具有相同可见权限的不同共享上获得正常的期望行为,所以我又回到不知道为什么这个特定共享不起作用。

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

2 个答案:

答案 0 :(得分:0)

试试这个

 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;
            }
        }

答案 1 :(得分:0)

我有同样的问题,我解决了,将写入权限提供给共享网络文件夹(目前只有读取权限)。共享文件夹最初位于 Linux ,但我已将其安装在 Windows Server 2008 R2 上,我正在使用FileSystemWatcher运行程序。