C# 监控映射的UNC时出现FileSystemWatcher()问题

C# 监控映射的UNC时出现FileSystemWatcher()问题,c#,filesystemwatcher,unc,C#,Filesystemwatcher,Unc,我对FileSystemWatcher类有问题。当我在监控硬盘上的本地文件时,它可以完美地工作。当我切换到映射的UNC时,它将不再触发。UNC被映射到一个本地驱动器X:,使用NET USE命令提供用户和密码,这是在启动时在批处理文件中完成的。有人知道为什么这样不行吗?我已经检查了路径,所有路径都是正确的,所以问题应该与其他方面有关 fw = new FileSystemWatcher(); fw.Path = fileInfoPath; fw.NotifyFilt

我对FileSystemWatcher类有问题。当我在监控硬盘上的本地文件时,它可以完美地工作。当我切换到映射的UNC时,它将不再触发。UNC被映射到一个本地驱动器X:,使用NET USE命令提供用户和密码,这是在启动时在批处理文件中完成的。有人知道为什么这样不行吗?我已经检查了路径,所有路径都是正确的,所以问题应该与其他方面有关

fw = new FileSystemWatcher();
        fw.Path = fileInfoPath;
        fw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        fw.Filter = fileInfoName;
        fw.Changed += new FileSystemEventHandler(FileOnChanged);
        fw.Created += new FileSystemEventHandler(FileOnChanged);

感谢您的帮助!:

我的解决方案是离开FileSystemWatcher,创建自己的小watcher。这很简单,但我唯一想看的是当文件被重写时,然后执行一些操作

这基本上就是我所做的,删除了try/catch和对其他线程的一些调用:

System.Threading.Timer tFileWatcher;
private string fileTime1 = "";
private string fileTime2 = "";
//
private void Form1_Load(object sender, EventArgs e)
    {
        tFileWatcher = new System.Threading.Timer(ComputeBoundOp2, 0, 0, 500);
        fileTime1 = File.GetLastWriteTime(fileInfo).ToFileTime().ToString();
        fileTime2 = File.GetLastWriteTime(fileInfo).ToFileTime().ToString();
    }

private void ComputeBoundOp2(Object state)
    {
        fileTime2 = File.GetLastWriteTime(fileInfo).ToFileTime().ToString();

        if (fileTime1 != fileTime2)
        {
        //Do something
        }
    }

我发现了一种非常酷的方法,可以在windows服务的codeproject中使用FileSystemWatcher获得UNC证书

见阿德里安·海斯邮报:


他的解决方案很有效。

我无法让任何日期和时间触发器工作。查看文件详细信息时,服务器根本没有更改它们。因此,我在文件size.NotifyFilters.size上使用了一个触发器,这很有效。我留下了其他通知,以防我没有使用UNC

      fsw.Path = Path.GetDirectoryName(currentFilename);
      fsw.Filter = Path.GetFileName(currentFilename);
      fsw.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Size;
      fsw.Changed += new FileSystemEventHandler(fsw_Changed);
      fsw.EnableRaisingEvents = true;  

并非所有文件服务器都支持此功能。您的网络共享使用了什么操作系统和文件系统?感谢您的反馈,我猜这就是问题所在,可能是unix文件服务器或类似的东西。。。用我自己的filewatcher解决了这个问题;