Laden...

Datei komplett geschrieben, dann erst kopieren

Erstellt von ZeBuRon vor 18 Jahren Letzter Beitrag vor 18 Jahren 5.235 Views
Z
ZeBuRon Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren
Datei komplett geschrieben, dann erst kopieren

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.

6.862 Beiträge seit 2003
vor 18 Jahren

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.

X
2.051 Beiträge seit 2004
vor 18 Jahren

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.

Z
ZeBuRon Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

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.

Q
992 Beiträge seit 2005
vor 18 Jahren

Kann man nicht irgendwie herausbekommen, ob jemand gerade Schreibzugriff auf die Datei hat?

Z
ZeBuRon Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

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!

6.862 Beiträge seit 2003
vor 18 Jahren

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.

X
2.051 Beiträge seit 2004
vor 18 Jahren

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

1.271 Beiträge seit 2005
vor 18 Jahren

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.

6.862 Beiträge seit 2003
vor 18 Jahren

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.

Z
ZeBuRon Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

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.

49.485 Beiträge seit 2005
vor 18 Jahren

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

Q
992 Beiträge seit 2005
vor 18 Jahren

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

Z
ZeBuRon Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

Hallo herbivore,

irgend wie steh ich auf dem Schlauch was meinst du mit dem ShareMode?
Kannst du mir da vielleicht kurz ein Tip geben. 😁

6.862 Beiträge seit 2003
vor 18 Jahren

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.