Überprüfen, ob eine Datei in Benutzung ist, warten Sie bis zum Ende
Ich habe dieses problem in meiner Anwendung:
- Schritt 1 - erstellen Sie eine Datei (xml) mit Inhalt in es
- Schritt 2 - ein 3rd-party-Anwendung die Datei geöffnet wird und Holen Sie sich die info aus der Datei in Schritt 1 vorgenommen.
- Schritt 3 - löschen Sie die Datei erneut.
Die erste Frage, die ich habe, ist über diesen Teil des Codes:
XmlDocument xmlDoc = new XmlDocument();
DataSet ds = //use a method to put in the data
xmlDoc.LoadXml(ds.GetXml());
xmlDoc.Save("Filename");
//...
Process.Start(startInfo);
Ist meine Annahme richtig, dass die Letzte Zeile wird nur ausgeführt, wenn die oben bereits getan?
Also ich kann 100% sicher sein, dass die Daten alle in der xml-bevor versucht wird, starten Sie es richtig?
Den zweiten Teil, wo bekomme ich nun einen Fehler ist hier:
Process.Start(startInfo);
File.Delete("Filename");
Was jetzt passiert, ist, dass die Datei schon gelöscht wird, bevor die 3rd-party-Programm gelesen hatte, die es in seinem Speicher.
Gibt es eine Möglichkeit, dass ich überprüfen kann, dass die Datei nicht mehr in Gebrauch ist, oder irgendeine stabile Art und Weise zu warten?
Ich bereits einen Weg gefunden, verwenden Sie Thread.Sleep(TimeInMiliSec);
aber ich denke, das ist nicht die richtige Art, dies zu tun (eher wie ein workaround-Lösung)?
InformationsquelleAutor Dante1986 | 2012-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie Sie gerade hinzufügen müssen, um so etwas wie die folgenden:
Prozess.Start() startet ein weiterer Prozess, aber er muss nicht warten, um diesen Prozess zu beenden, bevor Sie fortfahren.
Wenn der andere Prozess abstürzt WaitForExit zurück, ja. Wenn es andere Programme berühren Sie die Datei, dann werden Sie gezwungen werden, verwenden Sie eine der anderen Antworten, aber wenn Sie nur stolpern über sich selbst, dann sollten Sie etwas wie das zu tun.
InformationsquelleAutor Servy
Beschreibung
Können Sie die Methode in meinem Beispiel-und eine while-Schleife.
Probe
Dies wird so lange warten, kann die Datei gelöscht werden
Nur vorsichtig sein, mit dem fangen von IOException mit diesem code. Wenn die Datei nicht existieren, könnten Sie stecken in einer Schleife, aufgrund der Tatsache, dass FileNotFoundException extends IOException.
ist meine Annahme richtig, dass die Letzte Zeile wird nur ausgeführt, wenn die oben bereits getan ? also zum start wird nur auftreten, sobald das speichern erfolgt ist ?
Ja, XmlDocument.Sparen ist ein synchroner Aufruf. Es wird speichern Sie die Datei vor der Rückgabe und der Ausführung Ihrer Prozesse.Start.
InformationsquelleAutor dknaack
InformationsquelleAutor Phil Bolduc
Dies ist ein häufiges problem. Die Lösung ist leider versuchen, es zu öffnen und sehen, ob es eine Ausnahme.
Verwenden Sie die IsFileLocked(...) von hier:
Gibt es eine Möglichkeit zu überprüfen, ob eine Datei in Benutzung ist?
Tun und etwas wie:
InformationsquelleAutor DanTheMan
Könnten Sie stattdessen prüfen, ob der Prozess noch läuft...
Vielleicht erstellen Sie einen timer und überprüfen Sie diese alle paar Sekunden?
Hoffe es hilft, mein Erster post hier 🙂
InformationsquelleAutor MoatyMan