Laden...

Überprüfen ob sich im FileSystem was geändert hat

Erstellt von Briefkasten vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.048 Views
Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 14 Jahren
Überprüfen ob sich im FileSystem was geändert hat

Hallo,

ich schreibe derzeit ein Programm, dass ein Verzeichnis mit einen Zielverzeichnis synchronisiert.

Das Quell bzw. Zielverzeichnis kann auch eine Netzwerkfreigabe sein.

Jetzt weiß ich nicht, wie ich am Besten fest stellen kann, wann es neue Dateien gibt.

Es gibt für mich folgende mir bekannte Lösungsansätze:

Mit der fileSystemWatcher Klasse die Events auf Änderungen anmelden. Allerdings kann im Zielverzeichnis ein bzw. mehre Ordner sein. Dann müsste ich theoretisch für jedes Verzeichnis ein FileSystemWatcher Objekt haben.

Ich überprüfe jede x Minute die größe vom Quellverzeichnis. Wenn sich die Größe geändert hat, schau ich nach welche Dateien sich geändert haben und kopiere diese aufs Zielverzeichnis.

Allerdings sind beide Lösungsansätze nicht gerade performant. Gibt es bessere?

lg

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

Gelöschter Account
vor 14 Jahren

Allerdings kann im Zielverzeichnis ein bzw. mehre Ordner sein. Dann müsste ich theoretisch für jedes Verzeichnis ein FileSystemWatcher Objekt haben.

nein, du kannst im filesystemwatcher die eigenschaft "IncludeSubdirectories" auf true stellen. dann überwacht er alles.

Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 14 Jahren

Ausgezeichnet, wenn es keine bessere Methode gibt, werde ich diese verwenden.

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

X
1.177 Beiträge seit 2006
vor 14 Jahren

huhu,

Allerdings kann es passieren, dass Dir der FileSystemWatcher nicht alle Events ausgibt, wenn z.B. das zu überprüfende Verzeichnis eine Netzwerkfreigabe ist. (Imho ging FileChanged nicht)

😃

Xynraton

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

Gelöschter Account
vor 14 Jahren

wenn z.B. das zu überprüfende Verzeichnis eine Netzwerkfreigabe ist. (Imho ging FileChanged nicht)

also bei mir geht auch das auf einer netzwerkfreigabe.

297 Beiträge seit 2008
vor 14 Jahren

Dass manche Änderungen nicht angezeigt werden, liegt nicht daran, dass es Netzwerkfreigaben o.ä. sind, sondern daran, dass der Puffer überläuft. Dazu steht in der MSDN u.a. folgendes:

Das Betriebssystem Windows meldet der Komponente Änderungen an Dateien, die in einem von FileSystemWatcher erstellten Puffer vorgenommen wurden. Wenn in kurzen Abständen Änderungen vorgenommen werden, kann es zu einem Überlauf des Puffers kommen. Dies führt dazu, dass die Komponente die Änderungen im Verzeichnis nicht mehr verfolgen kann.

(mehr unter FileSystemWatcher in der MSDN

There are 10 kind of people, those who understand binary and those who don't.

Gelöschter Account
vor 14 Jahren

richtig. man muss 2 sachen beachten.

  1. in den eventbehandelnden methoden keine lang andauernden aktionen.
    wenn man etwas lang andauerndes machen will dann am besten in einem separatem thread.

  2. bei bedarf einfach den puffer vergrößern

dennoch kann es passieren das der puffer überläuft, wenn z.b. sehr sehr viele änderungen auf einmal auftreten.

S
469 Beiträge seit 2007
vor 14 Jahren

ich habe beim Beobachten von Netzlaufwerken noch bemerkt, dass sich der FileSystemWatcher gelegentlich ins Nirvana verabschiedet und nichts mehr melden will.
Grund scheinen sporadische kurze Netzwerkausfälle zu sein. In dem Fall wirft der FSW eine Exception und läuft nicht mehr weiter. Deshalb sollte man da das Error-Event des FSW anbinden (sonst bekommt man von der Exception nichts mit!) und den FSW im Falle des Falles neu starten (Achtung bei längeren Ausfällen nicht permanent probieren, sonst geht die Prozessorlast hoch, lieber zwischendurch mal kurz das Programm schlafen lassen).

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

X
1.177 Beiträge seit 2006
vor 14 Jahren

Ahh, Puffer, genau. Und da dies hier auch gilt

Das Festlegen von Filter verringert nicht die in den Puffer geschriebene Datenmenge.

ist auf ner Netzwerkfreigabe durchaus mal schnell was weg. Könnte mein Prob damals gewesen sein. Kann mich nur noch dunkel erinnern.

😃

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.