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