使用c#windows服务不断读取目录中的文件

本文关键字:文件 读取 c#windows 服务 使用 | 更新日期: 2023-09-27 17:58:16

我正在寻找一个好的解决方案来不断读取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);

使用c#windows服务不断读取目录中的文件

您正在陈述两种不同的用例——启动和监视。FileSystemWatcher只是用于监视。

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

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

FileSystemWatcher仅在活动时为您提供文件当前更改的可见性。要在没有更改的情况下捕获更改,您必须在一个单独的、持久的(外部文件,DB)列表中跟踪它们。醒来后,您的进程将不得不对照您的列表检查目录中的文件,看看是否有新文件。

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

另外,正如其他地方所指出的,注意你的目录不要太忙,否则你会错过更新。