我正在使用FileSystemWatcher来通知何时在网络目录中创建新文件。我们处理文本文件(大小约为5KB),并在目录中创建新文件时立即删除它们。如果FileSystemWatcher Windows服务由于某种原因停止,我们必须在它恢复并运行后查找未处理的文件。如果在处理目录中的旧文件时出现新文件,我该如何处理?有什么例子吗?
谢谢,
这是我用简单形式的代码示例。
public partial class Form1 : Form
{
private System.IO.FileSystemWatcher watcher;
string tempDirectory = @"C:\test\";
public Form1()
{
InitializeComponent();
CreateWatcher();
GetUnprocessedFiles();
}
private void CreateWatcher()
{
//Create a new FileSystemWatcher.
watcher = new FileSystemWatcher();
watcher.Filter = "*.txt";
watcher.NotifyFilter = NotifyFilters.FileName;
//Subscribe to the Created event.
watcher.Created += new FileSystemEventHandler(watcher_FileCreated);
watcher.Path = @"C:\test\";
watcher.EnableRaisingEvents = true;
}
void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
//Parse text file.
FileInfo objFileInfo = new FileInfo(e.FullPath);
if (!objFileInfo.Exists) return;
ParseMessage(e.FullPath);
}
void ParseMessage(string filePath)
{
// Parse text file here
}
void GetUnprocessedFiles()
{
// Put all txt files into array.
string[] array1 = Directory.GetFiles(@"C:\test\");
foreach (string name in array1)
{
string path = string.Format("{0}{1}", tempDirectory, name)
ParseMessage(path);
}
}
}
答案 0 :(得分:1)
当流程开始时,请执行以下操作:
答案 1 :(得分:1)
对于使用FileSystemWatcher的任何服务,我们始终在启动观察程序之前首先处理目录中存在的所有文件。观察者启动后,我们启动一个计时器(间隔时间相当长)来处理目录中出现的任何文件,而不会触发观察者(它会不时发生)。这通常涵盖了所有可能性。