C# Warten bis Datei erzeugt

Dorschty

Erfahrenes Mitglied
Hey Leute,

hätte mal ein Problem! Hab bei :google: leider nichts gefunden.
Und zwar, schreibe ich gerade ein Tool, das ein anderes Programm öffnet. Dieses andere Programm erzeugt eine .txt Datei, die ich für mein Tool benötige. Gibt es jetzt eine elegante Möglichkeit zu warten bis diese .txt Datei erzeugt wird? Ich könnte ständig auf Datei.Exists pollen, aber das ist nicht so das Gelbe vom Ei finde ich!
Wäre für jede Hilfe dankbar.

Gruß
Dorschty
 
Danke für den Tipp! Das sieht doch schonmal so aus, wie das was ich gebrauchen könnte!
Eine Frage hätte ich allerdings noch: Ich hab den Watcher jetzt folgendermaßen konfiguriert:
Code:
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "D:\\";
watcher.Filter = "*.txt";
watcher.Created;

Bleibt das Programm jetzt an der Stelle des Created hängen und wartet, bis die Datei erzeugt wird oder entsteht ein Created Event wenn die .txt erstellt wird und dann führt er den Quelltext und dem dem watcher.Created aus?! Sorry, bin leider noch Anfänger auf dem Gebiet!

Gruß
Dorschty
 
Ich kenne jetzt den FileSystemWatcher jetzt nicht, hätte aber einen anderen Ansatz:

Ich nehme an, das aufgerufene Programm ist beendet, nachdem es die Textdatei geschrieben hat und hängt nicht auf ewig im Speicher rum. In diesem Fall kannst du Ende des Prozesses einfach abwarten. Ich hab das wie folgt mal gemacht:
Code:
ProcessStartInfo psi = new ProcessStartInfo("irgendwas.exe", "parameterxyz");
psi.CreateNoWindow = true;
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
System.Diagnostics.Process result;
result = System.Diagnostics.Process.Start(psi);
System.IO.StreamReader myOutput = result.StandardOutput;
result.WaitForExit(30000);
if (result.HasExited)
{
      hier_kanns_weitergehen();
}
 
Zuletzt bearbeitet:
Ich glaube nicht das FileSystemWatcher.Created hier unbedingt geeignet ist.
Wer garantiert dir denn das dass andere Programm dann schon fertig ist
mit den Schreibzugriffen auf die Datei ?
Das kann zu bösen Fehlern führen.

Am besten wäre ein Event von dem anderen Tool das in die Datei schreibt
oder eine Dummy.txt Datei die erst angelegt wird wenn das Programm fertig
mit schreiben ist.

Gruß
Jens
 
Ich hab das Problem jetzt gelöst! Auch wenn es nicht soo schön ist!
@Quero: Wartest du nicht einfach 3 Sekunden? Oder versteh ich den Quelltext falsch?

Ich hab jetzt auch einfach eine Wait Funktion reingebracht!

Code:
System.Threading.Thread.Sleep(zeit in ms);

Trotzdem Danke für Eure Mühe!

Gruß
Dorschty
 
Das WaitForExit ist die maximale Wartezeit. Das ist nützlich als Notbremse, falls das aufgerufene Programm hängt. Nach Ablauf dieser Zeit würde dann eine Exception geworfen, die man schön geordnet abfangen kann. Ist das Programm vorher fertig, wird natürlich nicht weiter gewartet.

Die Angabe ist in Millisekunden, in meinem Beispiel also 30 Sekunden.
 

Neue Beiträge

Zurück