首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用FileSystemWatcher监视目录

使用FileSystemWatcher监视目录
EN

Stack Overflow用户
提问于 2013-02-22 13:30:08
回答 3查看 221.6K关注 0票数 114

我正在使用Windows窗体应用程序监视一个目录,并将其中放置的文件移动到另一个目录。

此时,它会将文件复制到另一个目录,但当添加另一个文件时,它将结束,没有错误消息。有时它会复制两个文件,然后在第三个文件上结束。

这是因为我使用的是Windows窗体应用程序而不是控制台应用程序吗?有没有一种方法可以停止程序的结束并继续监视目录?

private void watch()
{
  this.watcher = new FileSystemWatcher();
  watcher.Path = path;
  watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                         | NotifyFilters.FileName | NotifyFilters.DirectoryName;
  watcher.Filter = "*.*";
  watcher.Changed += OnChanged;
  watcher.EnableRaisingEvents = true;
}

private void OnChanged(object source, FileSystemEventArgs e)
{
  //Copies file to another directory.
}

public void Dispose()
{
  // avoiding resource leak
  watcher.Changed -= OnChanged;
  this.watcher.Dispose();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-06 23:40:05

问题出在notify过滤器上。程序试图打开仍在复制的文件。我删除了除LastWrite之外的所有通知过滤器。

private void watch()
{
  FileSystemWatcher watcher = new FileSystemWatcher();
  watcher.Path = path;
  watcher.NotifyFilter = NotifyFilters.LastWrite;
  watcher.Filter = "*.*";
  watcher.Changed += new FileSystemEventHandler(OnChanged);
  watcher.EnableRaisingEvents = true;
}
票数 158
EN

Stack Overflow用户

发布于 2013-02-22 14:18:14

您没有提供文件处理代码,但我假设您在第一次编写这样的代码时犯了每个人都会犯的错误: filewatcher事件将在文件创建后立即引发。但是,完成该文件需要一些时间。以1 GB的文件大小为例。该文件可能是由另一个程序创建的(Explorer.exe从某个地方复制它),但完成该过程需要几分钟时间。该事件在创建时引发,您需要等待文件准备好复制。

您可以在循环中使用this函数来等待文件准备就绪。

票数 33
EN

Stack Overflow用户

发布于 2013-02-22 14:18:59

原因可能是watcher被声明为方法的局部变量,并在方法结束时被垃圾回收。您应该将其声明为类成员。尝试以下操作:

FileSystemWatcher watcher;

private void watch()
{
  watcher = new FileSystemWatcher();
  watcher.Path = path;
  watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                         | NotifyFilters.FileName | NotifyFilters.DirectoryName;
  watcher.Filter = "*.*";
  watcher.Changed += new FileSystemEventHandler(OnChanged);
  watcher.EnableRaisingEvents = true;
}

private void OnChanged(object source, FileSystemEventArgs e)
{
  //Copies file to another directory.
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15017506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档