Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datei komplett geschrieben, dann erst kopieren
ZeBuRon
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

Datei komplett geschrieben, dann erst kopieren

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2.051

beantworten | zitieren | melden

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."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
ZeBuRon
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 992
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Kann man nicht irgendwie herausbekommen, ob jemand gerade Schreibzugriff auf die Datei hat?
private Nachricht | Beiträge des Benutzers
ZeBuRon
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2.051

beantworten | zitieren | melden

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."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
progger
myCSharp.de - Member

Avatar #avatar-2094.gif


Dabei seit:
Beiträge: 1.271
Herkunft: Nähe von München

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
ZeBuRon
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Quallo,
Zitat
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
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 992
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Zitat
Original von herbivore
Hallo Quallo,
Zitat
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
private Nachricht | Beiträge des Benutzers
ZeBuRon
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,

irgend wie steh ich auf dem Schlauch was meinst du mit dem ShareMode?
Kannst du mir da vielleicht kurz ein Tip geben.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers