2009-08-20 2 views
0

Я использую FileSystemWatcher для уведомления о создании новых файлов в сетевом каталоге. Мы обрабатываем текстовые файлы (размером около 5 КБ) и удаляем их сразу же после создания нового файла в каталоге. Если служба Windows FileSystemWatcher прекращается по какой-то причине, мы должны искать необработанные файлы после их восстановления и запуска. Как я могу обработать, будет ли новый файл при обработке старых файлов из каталога? Любые примеры, пожалуйста?FileSystemWatcher и необработанные файлы

Спасибо,

Вот пример кода, я с простой формой.

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

Когда начинается процесс сделайте следующее:

  • сначала получить содержимое папки
  • процесса каждый файл (конец удалить их, как вы уже сейчас)
  • повторяйте до тех пор, пока в папке не будет файлов (проверьте здесь еще раз, поскольку в папку был добавлен новый файл).
  • начать наблюдающий
+0

Спасибо за ответ. Я думал об этом. – 2009-08-20 14:32:44

+0

Хотя это маловероятно, это нехорошее решение. Файл может быть создан между последней проверкой файлов и инициализацией наблюдателя. – johnw182

0

Для любой из наших услуг, которые используют FileSystemWatcher мы всегда обрабатывать все файлы, которые существуют в каталоге первых, перед началом Бодрствующего. После запуска наблюдателя мы запускаем таймер (с довольно длинным интервалом) для обработки любых файлов, которые появляются в каталоге, без запуска наблюдателя (время от времени это происходит). Это обычно охватывает все возможности.