FileSystemWatcher和未处理的文件

时间:2009-08-20 14:03:38

标签: c#

我正在使用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);
    }
  }

}

2 个答案:

答案 0 :(得分:1)

当流程开始时,请执行以下操作:

  • 首先获取文件夹的内容
  • 处理每个文件(最后删除它们,就像你现在一样)
  • 重复,直到文件夹中没有文件(此处再次检查,因为新文件可能已放入文件夹中)。
  • 启动守望者

答案 1 :(得分:1)

对于使用FileSystemWatcher的任何服务,我们始终在启动观察程序之前首先处理目录中存在的所有文件。观察者启动后,我们启动一个计时器(间隔时间相当长)来处理目录中出现的任何文件,而不会触发观察者(它会不时发生)。这通常涵盖了所有可能性。