我正在尝试为文件添加到共享中的文件夹观看网络共享,以指示上传已完成。我想使用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事件。 (重命名时我仍然没有得到任何结果。)这解决了我当前的问题,但我会打开问题以防有人能够回答为什么正在发生的事情。
答案 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运行程序。