0

我正在寻找一个好的解决方案来不断读取我的 Windows 服务目录中的文件。目前,我正在使用 FileSystemWatcher 来处理添加到目录中的 xml 文件。这在服务运行时效果很好。但是,如果服务因某种原因停止,则在服务停止时添加到目录中的文件永远不会得到处理。最好的解决方案是什么?下面是我为 FileSystemWatcher 提供的代码。也许 FileSystemWatcher 可以做到这一点,但是,我可能使用不正确。

// Setup FileSystemWatcher to watch 'IN' directory...
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = ConfigurationManager.AppSettings["InputPath"];
watcher.EnableRaisingEvents = true;
watcher.Filter = "*.xml";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.Created += new FileSystemEventHandler(FileAdded);
4

2 回答 2

3

您正在陈述两个不同的用例 - 启动和监控。FileSystemWatcher 仅用于监视。

但是在启动时,您必须查看文件系统本身,看看是否有任何文件在等待,如果有,请处理它们。理想情况下,您应该能够使用 FileAdded 函数,或者至少让 FileAdded 调用相同的函数来处理文件。

在启动时,我会做一个简单的循环:while(InputPath 中有任何文件){ process a file(); } 添加 FileSystemEventHandler 代码;

于 2013-02-06T21:49:19.940 回答
0

FileSystemWatcher只会让您在文件处于活动状态时查看当前对文件的更改。要在未更改时捕获更改,您必须在单独的持久(外部文件,DB)列表中跟踪它们。醒来后,您的进程必须根据您的列表检查目录中的文件,以查看是否有新文件。

其他注意事项:如果您的系统正在监视从可能较慢的连接写入的目录(例如,监视 FTP 目录),您将需要设置另一个监视程序或其他机制来检查文件是否仍在更改添加后的一段时间。

同样如其他地方所述,请注意您的目录不要太忙,否则您会错过更新。

于 2013-02-06T22:00:10.083 回答