ich habe schon bischen das Forum durch sucht nach meinem Problem aber keine Lösung gefunden.
Ich habe ein Programm was einen Ordner überwacht ob Files rein geschrieben werden, aber der FileSystemWatcher startet zu schnell und kopiert mir so leider nicht komplette Datein weg. Kann ich ich dem FileSystemWatcher irgend wie sagen das er so lange warten muss bis es komplett ist, oder gibts da irgend eine andere Funktion.
Er startet nicht zu schnell, du musst bloß abwarten. Der FileSystemWatcher überwacht ja alle Änderungen am Filesystem und die meldet er jede einzelnen schön brav. Mit zu schnell meinst du wahrscheinlich das er dir z.b. sagt es wurde nen File erzeugt, du willst es kopieren, aber es ist noch gar net komplett vorhanden oder? Musst drauf achten das der FileSystemWatcher ja mehrere events für eine Aktion wirft, ist ja nicht so das für eine Aktion im Explorer(z.b. neue Datei ins Verzeichnis kopiert) der FilesystemWatcher nur ein Event erzeugt, da werden mehrere erzeugt und die musst du halt abwarten.
Was nen bissle Q'nD wäre: Wenn du nen Event bekommst das nen File neu erzeugt wurde, dann nen FileInfo erzeugen der Datei und mit Refresh so lange beim FileInfo schaun bis sich die Größe nicht mehr ändert, dann weißt du es ist komplett drauf.
mit FileSystemWatcher habe ich auch schon so manche Probleme gehabt, so dass ich drauf ganz verzichtet habe (IMHO ist das Teil so gut, wie unbrauchbar).
als Ersatz würde ich in einem extra Thread einfach prüfen ob bestimmte Änderungen passiert sind. Z.B., wie Tall bereits vorgeschlagen hat, die Größe überwachen.
"A programmer is a tool which converts coffein to code."
Ok danke, für die Vorschläge mal schauen wie ich das am besten hin bekomme.
Ich habe auch schon ein paar Probleme mit dem Teil gehabt aber ich wollte ihn noch mal testen
Du musst ne Schleife drum herum laufen lassen die dir immer die Größe zwischen zwei Durchläufen vergleicht. Wenn die sich zwischen zwei Durchläufen net ändert : fertig
Die neuen Infos holst du dir mit fi.Refresh() und dann vergleichst du halt mit dem Vorherigen.
in die Schleife noch eventuel eine kleine Pausse einbauen, damit nicht zu schnell läuft. Die Schleife im Speicher läuft bestimmt schneller, als auf die Platte geschrieben wird.
nicht getestet *g*
"A programmer is a tool which converts coffein to code."
Wenns dir nicht um Geschwindigkeit geht, könntest du z.B. auch warten bis die Datei sich z.B. 10mal (oder sogar 100mal) nicht geändert hat. Weil es könnte ja auch sein, dass das Programm, das die Datei schreibt gerade eine aufwendige Operation macht und dann erst weiterschreibt.
A wise man can learn more from a foolish question than a fool can learn from a wise answer! Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren! Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Original von Xqgene
in die Schleife noch eventuel eine kleine Pausse einbauen, damit nicht zu schnell läuft. Die Schleife im Speicher läuft bestimmt schneller, als auf die Platte geschrieben wird.
nicht getestet *g*
Natürlich mit Pause, sonst könnts übel enden wenn ne Applikation z.B. nen CD-Image schreiben will - er registriert das, lässt seine Schleife laufen und die lässt sein Programm erstmal auf 99% CPU Last springen weil keine Pause drin ist. Das Programm das kopiert wird dadurch gehindert zügig zu kopieren und brauch noch länger usw. Schöner Teufelskreis
Danke schon mal, muss ich gleich mal testen.
Naja es geht um einen Upload auf einen Server und das Problem dabei ist ich weis nicht wie groß die Datei sind und deswegen möchte ich ja erst mal prüfen.
Kann man nicht irgendwie herausbekommen, ob jemand gerade Schreibzugriff auf die Datei hat?
Du meinst sicher, ob man nicht herausfinden kann, ob gerade jemand schreibend zugreift. :-) Das ist ein großer Unterschied.
Man kann die Datei mit dem entsprechenden ShareMode versuchen zu öffnen und wenn das geht, gereift keiner schreibend zu.
herbivore
Genau das meine ich! Warst mal wieder erfolgreich beim Gedanken lesen *g*.
Man sollte das mal testen, wenn das zuverlässig klappt, dann ist es sicherlich besser als das prüfen der Größe!
Benutz doch die MSDN! Da steht alles drin. Der ShareMode beschreibt wie der Name schon sagt, ob der Dateizugriff geshared ist oder nicht, sprich ob mehrere Applikationen darauf zugreifen können oder nicht. Und wenn mehrere darauf zugreifen können, in welcher Art sie das tun dürfen.