我遇到了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);
帮助表示感谢! :)
答案 0 :(得分: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
}
}
答案 1 :(得分:0)
我找到了一种非常酷的方法,让UNC在代码项目的Windows服务中使用凭证与FileSystemWatcher一起工作。
见Adrian Hayes的帖子:http://www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials
他的解决方案很有效。
答案 2 :(得分: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;