Gibt es eine Möglichkeit zu überprüfen, ob eine Datei in Benutzung ist?

Ich Schreibe ein Programm in C# und muss wiederholt Zugang 1-image-Datei. Die meisten der Zeit es funktioniert, aber wenn mein computer schnell laufen, es wird versucht, auf die Datei zugreifen, bevor es gespeichert wurde wieder auf das Dateisystem und wirft einen Fehler: "Datei von einem anderen Prozess verwendet".

Ich würde gerne einen Weg finden, um dieses, aber alle meine Googlen hat nur nachgegeben erstellen von Prüfungen durch die Verwendung von exception-handling. Das ist gegen meine religion, ich Frage mich, wenn jemand eine bessere Weise, es zu tun?

  • Klar, Sie können es testen, indem Sie untersuchen alle geöffneten handles auf dem system. Jedoch da Windows ist ein multitasking-Betriebssystem, es gibt eine chance, dass sofort, nachdem Sie den code ausführen, um festzustellen, ob die Datei geöffnet ist und Sie meinen, es ist nicht ein Prozess von code beginnen mit die Datei, die dann durch die Zeit, die Sie versuchen, es zu verwenden, erhalten Sie eine Fehlermeldung. Aber, es ist nichts falsch mit der überprüfung den ersten, nur nicht davon ausgehen, es ist nicht in verwenden Sie, wenn Sie es wirklich benötigen.
  • Aber nur für dieses spezifische Problem; ich würde empfehlen, nicht die Prüfung des Datei-handles, und nur versuchen, einige voreingestellte Anzahl von Zeiten, sagen 3-5 vor dem scheitern.
  • Wie ist diese image-Datei erzeugt? Können Sie stop/schlafen/pause Ihr Programm, bis die Generierung abgeschlossen ist? Das ist bei weitem eine überlegene Art mit der situation umzugehen. Wenn nicht, dann denke ich nicht, dass Sie können, vermeiden Sie die Verwendung von exception-handling.
  • Dies ist ein Duplikat von stackoverflow.com/questions/1304/...
  • Nicht alle die Nutzung von Ausnahmen, die eine überprüfung auf eine Annahme von etwas potenziell gefährlich ist und absichtlich nicht ausschließt, die Möglichkeit des Scheiterns?
  • Ihre Philosophie hat ein schlechtes Verständnis von Ausnahmen. Die meisten Leute denken, dass Ausnahmen die Mittel Heiligen-Mist-out-of-doom-irgendwas-ist-falsch-sterben-sterben-sterben. Als Ausnahme bedeutet..... Ausnahme. Es bedeutet, dass etwas außergewöhnliches geschehen ist, dass Sie brauchen, um zu "verarbeiten" (oder-Konto für). Vielleicht wollen Sie auf halten, wiederholen für den Datenzugriff, vielleicht muss der Benutzer wissen, dass Sie keine Verbindung herstellen können. Was tun Sie? Sie behandeln die ConnectionFailedException und dem Nutzer mitteilen, so vielleicht, Sie werden aufhören zu versuchen, nach einer Stunde, und beachten Sie die Kabel nicht angeschlossen ist.
  • Mehr potentielle Antworten hier: stackoverflow.com/questions/1304/how-to-check-for-file-lock
  • Spolier alert; nicht einen konstruktiven Kommentar; aber das format der Frage-und die Kommentare sind einfach genial.
  • Warum haben die Prüfung und Bearbeitung in den verschiedenen Verfahren? try {open Datei im FileShare.Keine; Prozess-Datei; Datei schließen} catch {filelocked) {//gesperrt ist, bekommen wir es das nächste mal}
  • Lee Louviere der op hat eine gültige Abneigung gegen das arbeiten mit Ausnahmen. Wenn Sie einfach verwenden können filexists Methode wissen, ob eine Datei vorhanden ist, was einen ähnlichen Befehl existiert, um zu wissen, ob die Datei, die Sie möchten, mit zu arbeiten ist im Einsatz? In der Tat glaube ich, dass ist die Frage die op ist wirklich zu Fragen.

InformationsquelleAutor Dawsy | 2009-05-18
Schreibe einen Kommentar