【问题标题】:FileSystemWatcher stops working without messageFileSystemWatcher 在没有消息的情况下停止工作
【发布时间】:2015-08-24 20:42:54
【问题描述】:

嗨,发展中的朋友们!

情况: 我为一些简单的文件交换作业提供了一项小型服务,可以将文件从一个系统移动到另一个系统,并进行一些搜索和替换/解压缩。用 C# 编写的服务使用 FileSystemWatcher 检查文件夹中的新文件。 代码:

private static void Main(string[] args)
{
    try
    {
        InitializeService();
    }
    catch (Exception ex)
    {

    }

    fsw = new FileSystemWatcher();
    fsw.Path = RootPath;
    //Watch only directories
    fsw.NotifyFilter = NotifyFilters.DirectoryName;

    //Add the event functions
    fsw.Created += FileSystemEvent;
    //fsw.Changed += FileSystemEvent;
    fsw.Error += OnError;

    //start the listener
    fsw.EnableRaisingEvents = true;

    Console.WriteLine("Started with path: " + RootPath);

    Console.ReadLine();
}

问题描述: filewatcher 的路径在另一台服务器上,所以我正在连接到一个共享。 文件监视程序有时会失去与目录的连接(网络问题、维护窗口期间服务器重新启动或其他任何情况)。 如果发生这种情况,filewatcher 不会重新连接到服务器或抛出异常或任何其他表明他不再连接的指示。什么都不做!

问题 我可以做些什么来检查文件观察器是否丢失了连接? 因为我现在的解决方法是每天晚上使用预定的作业重新启动服务器,并首先检查现有文件并在之前处理它们。但是,如果您使用文件监视程序,我认为这不是应该的想法。

非常感谢

【问题讨论】:

  • 您是否已经看过this question 及其接受的答案?
  • 在接受的答案中写道,临时网络问题将触发错误事件,此处并非如此。

标签: c# events


【解决方案1】:

也许垃圾收集器会删除 FileSystemWatcher 实例。

试试GC.KeepAlive:

Console.ReadLine();
GC.KeepAlive(fsw);

【讨论】:

  • 为什么?在我的服务中,我仍然对 fsw 有积极的参考
【解决方案2】:

您是否尝试过将所有 FSW 内容放入带有 try-catch 的方法中?当方法退出时,您可以像这样(伪)在 while 循环中再次调用它:

private static void Main(string[] args)
{
    while (true)
    {
        CallWatcher();
    }
}

private static void CallWatcher() 
{
    var watcher = new FileSystemWatcher();
    try
    {
        // do watcher stuff here
    }
    finally 
    {
        watcher.Dispose();
    }
}

【讨论】:

  • 我试一试。遗憾的是,这个问题很难测试,它需要几天的时间才能看到它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2021-06-03
  • 2021-05-25
  • 2014-07-11
  • 2021-05-04
  • 1970-01-01
相关资源
最近更新 更多