2011-09-07 43 views
0

我有一个FileSystemWatcher()类的问题。当我监视硬盘上的本地文件时,它完美地工作。当我更改为映射的UNC时,它不再触发。 UNC映射到本地驱动器(X :),使用NET USE命令提供用户名和密码,这是在启动时以批处理文件完成的。任何知道为什么这不起作用的人?我检查了路径,它们都是正确的,所以问题应该与其他事情有关...FileSystemWatcher()在监视映射的UNC时出现问题

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

帮助赞赏! :)

+0

并非所有文件服务器都支持此功能。什么操作系统和文件系统用于你的网络共享? – Gabe

+0

感谢您的反馈,猜测这是问题,可能是unix文件服务器或类似的问题......用我自己的filewatcher解决了问题;) – jmelhus

回答

0

我对该问题的解决方案是离开FileSystemWatcher()并创建我自己的小监视器。这很简单,但我唯一想看的是文件被重写并执行一些操作。

这基本上就是我做的(删除的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 
     } 
    } 
0

我无法获得任何日期和时间触发器的工作。查看文件详细信息,服务器根本没有改变它们。所以相反,我在文件大小(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;