【问题标题】:Argument Exception (Path is not of a legal form)参数异常(路径不是合法形式)
【发布时间】:2011-08-19 04:10:23
【问题描述】:

背景信息:我正在使用服务中实现的 FileSystemWatcher 类来监视文件中的更改。这是触发 onCreate 事件时引发参数异常(路径不是合法形式)的编码部分。

FileMonitor.CS

public partial class FileMonitor:ServiceBase
{
 public FileSystemWatcher Watcher = new FileSystemWatcher();

    Private void FileWatcher()
    {
    FileActionHandler ActionHandler = new FileActionHandler();
    Watcher.Created += new FileSystemEventHandler(ActionHandler.onCreate);
    Watcher.Deleted += new FileSystemEventHandler(ActionHandler.onDelete);
    Watcher.Renamed += new RenamedEventHandler(ActionHandler.onRenamed);
    Watcher.EnableRaisingEvents = true;
    }
}

FileActionHandler.CS

 class FileActionHandler
 {
  FileMonitor FileMon = new FileMonitor();
  public void onCreate/onRename/onDelete(object source, FileSystemEventArgs e)
    {
      try
      {
       FileMon.Watcher.EnableRaisingEvents = false;
      }
      catch
      {
       /* Exception Code */
      }
      finally
      {
       FileMon.Watcher.EnableRaisingEvents = true;
      }
    }
  }

问题: 谁能建议我为什么抛出异常以及如何解决它?

【问题讨论】:

  • 哪一行抛出异常?
  • 这就是问题所在。我不知道哪一行引发了异常。但是我将范围缩小到导致抛出异常的这部分代码。
  • 我猜你在发布之前已经简化了你的代码。你能发布你的实际代码吗?
  • 当我使用 FileSystemWatcher 监视文件中的更改时,我实际的整个代码工作正常。但是自从我添加这部分代码以来,异常被抛出并且我的服务将停止工作。本节中的某个地方会引发错误。
  • 您可以将调试器连接到服务以查看其崩溃的位置吗?

标签: c# filesystemwatcher argumentexception


【解决方案1】:

几周前我遇到了同样的问题。 我发现您需要在设置其他任何内容之前设置路径。 所以,在你声明对象之后:

FileSystemWatcher watchfolder = new FileSystemWatcher();
watchfolder.Path = ConfigurationManager.AppSettings["MonitorPath"];

您可以在此处阅读更多内容: Create a file watcher service for windows

希望对你有帮助

【讨论】:

  • 知道如何为事件处理程序合并多线程吗?
  • 我还没有专门对文件观察服务进行任何多线程处理......对不起:(
  • 多线程/异步可以用 TPL 完成。搜索 ActionBlock。
  • 不敢相信您必须先设置该属性,但它为我修复了它!
  • 发现只要在设置Path之前不设置EnableRaisingEvents为true就可以了。
猜你喜欢
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多