Probleme mit FileSystemWatcher



  • Hallo Community,

    wie im Titel beschrieben, habe ich ein kleines Problem mit einem FileSystemWatcher. Ich möchte aus einer Log Datei, in die fortlaufend geschrieben wird, ständig die neuesten Einträge lesen und verarbeiten. Hierfür wollte ich einen FileSystemWatcher verwenden, der mich benachrichtig wenn sich die Größe bzw. das "LastWrite" Attribut ändert. Leider macht es das nicht wirklich. Hier mein Code:

    private void start_Click(object sender, EventArgs e)
    		{
    			FileInfo info = new FileInfo(combatLogPath.Text);
    
    			fileWatcher.NotifyFilter = NotifyFilters.Size |
    											NotifyFilters.LastWrite |
    											NotifyFilters.LastAccess |
    											NotifyFilters.Attributes;
    			fileWatcher.Path = info.DirectoryName;
    			fileWatcher.EnableRaisingEvents = true;
    			fileWatcher.Changed += new FileSystemEventHandler(combatlogWatcher_Changed);
    
    			start.Enabled = false;
    		}
    
    		void combatlogWatcher_Changed(object sender, FileSystemEventArgs e)
    		{
    			Text = "Doh!";	
    		}
    

    Selbst wenn ich irgendeine txt angebe und dort per notepad was reinschreibt, meldet er sich nicht wirklich. Irgendwas muss ich vergessen haben, denn eigentlich habe ich sowas schonmal gemacht, nur finde ich den Quelltext leider nicht mehr. Ich denke mal ich habe Tomaten auf den Augen. Bin für jeden Tipp dankbar.

    Grüße,
    kelox.



  • Versuch mal EnableRaisingEvents nach dem Hinzufügen des EventHandlers.



  • Funktioniert leider auch nicht.



  • kelox schrieb:

    Funktioniert leider auch nicht.

    Doch, tut es. Hab' gerade mal dieses Beispiel getestet. Funktioniert problemlos.



  • Hast du bei
    "Text = "Doh!";"
    mal ein Breakpoint gesetzt?
    Eventuell siehst du die Änderung nur nicht (aus diversen gründen)



  • Danke für den Hinweise, das Beispiel aus der MSDN hat bei mir auch nicht funktioniert. Das mit dem Breakpoint habe ich auch probiert. Ich habe den oben genannten Quelltext nochmal probiert, jedoch mit einer Datei unter C:\User\ich\Documents. Da hat es geklappt. Mit einer Datei unter E:\ klappt es nicht. Kann es sein, dass es ein Berechtigungsproblem ist?



  • kelox schrieb:

    Danke für den Hinweise, das Beispiel aus der MSDN hat bei mir auch nicht funktioniert. Das mit dem Breakpoint habe ich auch probiert. Ich habe den oben genannten Quelltext nochmal probiert, jedoch mit einer Datei unter C:\User\ich\Documents. Da hat es geklappt. Mit einer Datei unter E:\ klappt es nicht. Kann es sein, dass es ein Berechtigungsproblem ist?

    Ist E:\ bei dir eine fat32 Partition? Möglicherweise ist das die Ursache



  • So, es war doch ein Fehler in meinem Code. Ich habe die Methode aus dem MSDN Beispiel übernommen und jetzt klappt es auch mit dem Notepad (also wenn ich im Notepad was eintippe in die Datei und diese Ändernungen speicher, wird das Event gefeuert).
    Ich wollte jetzt jedoch noch ein Emulationprogramm schreiben, welches mit Daten in einer Textdatei fortlaufend reinschreibt. Das Problem dort ist jedoch, dass das event erst gefeuert wird, wenn ich das Emulationsprogramm schließe bzw. den Stream per Close() schließe. Selbst bei einem Flush() des Streams wird das Change Event nicht ausgelöst. Hat jemand vielleicht jemand einen Tipp?

    PS: Code des Emulationprogramm kommt noch.



  • kelox schrieb:

    Das Problem dort ist jedoch, dass das event erst gefeuert wird, wenn ich das Emulationsprogramm schließe bzw. den Stream per Close() schließe. Selbst bei einem Flush() des Streams wird das Change Event nicht ausgelöst. Hat jemand vielleicht jemand einen Tipp?

    PS: Code des Emulationprogramm kommt noch.

    Das ist ganz normal.


Anmelden zum Antworten