0

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

帮助表示赞赏!:)

4

3 回答 3

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
        }
    }
于 2011-09-23T14:23:42.150 回答
0

我找到了一种非常酷的方法来获取 UNC,其凭据与 Codeproject 上的 Windows 服务中的 FileSystemWatcher 一起使用。

请参阅 Adrian Hayes 的帖子: http: //www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials

他的解决方案很有效。

于 2013-12-03T14:36:06.850 回答
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;  
于 2014-07-28T13:21:26.220 回答