2009-08-20 7 views
0

Ich benutze den FileSystemWatcher, um zu benachrichtigen, wenn die neuen Dateien im Netzwerkverzeichnis erstellt werden. Wir verarbeiten die Textdateien (ca. 5 KB Größe) und löschen sie sofort, wenn die neue Datei im Verzeichnis erstellt wird. Wenn der FileSystemWatcher-Windows-Dienst aus irgendeinem Grund beendet wird, müssen wir nach dem erneuten Starten der Datei nach den unverarbeiteten Dateien suchen. Wie kann ich damit umgehen, wenn die neue Datei beim Verarbeiten der alten Dateien aus dem Verzeichnis kommt? Irgendwelche Beispiele bitte?FileSystemWatcher und unverarbeitete Dateien

Danke,

Hier ist der Code Beispiel, das ich mit einer einfachen Form haben.

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); 
    } 
    } 

}

Antwort

0

Wenn der Prozess startet wie folgt vor:

  • zunächst den Inhalt des Ordners erhalten
  • Prozess jede Datei (Ende löschen, wie Sie bereits jetzt tun)
  • wiederholen, bis sich keine Dateien mehr im Ordner befinden (überprüfen Sie es hier erneut, da eine neue Datei in den Ordner hätte eingefügt werden können).
  • den Beobachter
+0

Danke für die Antwort. Ich habe darüber nachgedacht. –

+0

Obwohl unwahrscheinlich, ist dies keine gute Lösung. Zwischen der letzten Überprüfung auf Dateien und dem Initialisieren des Watcher konnte eine Datei erstellt werden. – johnw182

0

Für alle unsere Dienstleistungen beginnen, die die Filesystemwatcher verwenden wir alle Dateien immer verarbeiten, die zuerst in dem Verzeichnis vorhanden, bevor die Beobachter zu beginnen. Nachdem der Watcher gestartet wurde, starten wir einen Timer (mit einem ziemlich langen Intervall), um alle Dateien, die im Verzeichnis erscheinen, zu bearbeiten, ohne den Watcher auszulösen (was von Zeit zu Zeit passiert). Das deckt normalerweise alle Möglichkeiten ab.

Verwandte Themen