Hallo,
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.
Danke schon mal im vorraus.
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.
Baka wa shinanakya naoranai.
Mein XING Profil.
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.
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 😁
Aber das mit dem Refresh ist eine gute Idee.
Kann man nicht irgendwie herausbekommen, ob jemand gerade Schreibzugriff auf die Datei hat?
Muss noch mal nachfragen wegen dem Refresh, ich habe jetzt die Datengröße aber wie überprüfe ich das jetzt ob die irgendwann fertig ist???
FileInfo fi = new FileInfo(FileLaenge);
long fileSize = fi.Length;
Vielleicht kann mir ja jemand einen Denkanstoss geben.
Danke schon mal!
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.
Baka wa shinanakya naoranai.
Mein XING Profil.
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
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 🙂
Die Idee von Progger ist auch nicht schlecht.
Baka wa shinanakya naoranai.
Mein XING Profil.
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.
Hallo Quallo,
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
Original von herbivore
Hallo Quallo,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!
Grüße, Christoph
Hallo herbivore,
irgend wie steh ich auf dem Schlauch was meinst du mit dem ShareMode?
Kannst du mir da vielleicht kurz ein Tip geben. 😁
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.
Baka wa shinanakya naoranai.
Mein XING Profil.