为了账号安全,请及时绑定邮箱和手机立即绑定

使用FileSystemWatcher监视目录

使用FileSystemWatcher监视目录

C#
不负相思意 2019-10-16 10:59:28
我正在使用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();}
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

问题是通知过滤器。该程序试图打开一个仍在复制的文件。我删除了除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;

}


查看完整回答
反对 回复 2019-10-16
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

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


您可以循环使用此功能来等待文件准备就绪。


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 637 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信