Fehlerbehandlung in C ++ beim Öffnen einer Datei

Wenn Sie eine Datei öffnen, können alle möglichen Dinge schief gehen. Eine Datei, lebt auf einem physischen Gerät - eine Festplatte, zum Beispiel, oder vielleicht auf einem Flash-Laufwerk oder einer SD-Karte - und Sie können auf Probleme stoßen, wenn sie mit physischen Geräten arbeiten.

Beispielsweise ein Teil der Platte beschädigt werden könnte, so dass eine vorhandene Datei beschädigt zu werden. Oder weniger katastrophal, könnten Sie aus Festplattenspeicher ausgeführt werden. Oder, noch weniger katastrophal, können Sie versuchen, eine Datei in einem Verzeichnis zu öffnen, die nicht existiert.

Wenn Sie versuchen, eine Datei zum Schreiben zu öffnen, indem Sie einen vollständigen Pfad und Dateinamen angibt, aber das Verzeichnis nicht existiert, reagiert der Computer unterschiedlich, je nach Betriebssystem sind Sie verwenden. Wenn Sie nicht sicher sind, wie Sie Ihr Betriebssystem reagiert, versuchen Sie eine einfache Anwendung zu schreiben, und öffnen Sie so etwas wie /abc/def/ghi/jkl/abc.txt zu schaffen versucht. (Natürlich werden Sie wollen sicher sein, ein Verzeichnis zu verwenden, die nicht existiert.)

Einer von zwei Dinge passieren: Entweder ist das Verzeichnis und die Datei wird erhalten erstellt, oder es wird nichts passieren.

Zum Beispiel auf einem Windows-System, wenn wir eine Datei in einem Verzeichnis zu erstellen versuchen, die nicht vorhanden ist, prüft das System nicht das Verzeichnis erstellen. Das liegt daran, tief im Inneren nach unten, die Anwendung schließlich eine Betriebssystemfunktion aufruft, tut die schmutzige Arbeit, die Datei zu erstellen. Und diese besondere Funktion des Betriebssystems (es heißt Createfile (), auch wenn Sie Pflege) hat eine Regel, es wird ein Verzeichnis für Sie nicht erstellen.

Wenn Sie möchten, ob das zu bestimmen, ostream Klasse war nicht in der Lage, eine Datei zu erstellen, können Sie rufen ihre fehlschlagen() Member-Funktion. Diese Funktion gibt wahr wenn das Objekt konnte die Datei nicht erstellen. Und das ist, was passiert, wenn ein Verzeichnis existiert nicht. Das DirectoryCheck01 Beispiel gezeigt, veranschaulicht ein Beispiel dafür.

#einschließen #einschließen using namespace std-int main () {ofstream outfile ( "/ abc / def / ghi / MyFile.txt") - if (outfile.fail ()) {cout lt; lt; "Konnte die Datei nicht öffnen!" lt; lt; Endl-return 0-} outfile lt; lt; "Hallo" lt; lt; Endl-outfile.close () - Rückkehr 0-}

Wenn Sie diesen Code ausführen, vorausgesetzt, dass Sie angerufen haben nicht ein Verzeichnis / Abc / def / ghi auf Ihrem System, sollten Sie die Meldung Die Datei konnte nicht geöffnet werden! Unter der Annahme, dass Ihr Betriebssystem nicht schaffen, ein Verzeichnis in diesem Fall-, wenn dies der Fall, wird der Computer die Datei öffnen, schreiben Hallo um es, und mit seinem glücklichen Leben weitergehen, nachdem die Dinge aus zu schließen.

Als Alternative zu der Aufruf fehlschlagen() Member-Funktion können Sie einen Operator in verschiedenen Stream-Klassen verwenden. Dies ist!, Liebevoll bezeichnet als # 147-Bang # 148- Operator, und Sie würden es anstelle des Aufrufs verwenden fehlschlagen(), wie in diesem Code:

if (! outfile) {cout lt; lt; "Konnte die Datei nicht öffnen!" lt; lt; Endl-return 0-}

Die meisten Menschen bevorzugen zu verwenden !outfile Anstatt von outfile.fail (), obwohl !outfile macht verwirrend Code. Der Grund ist, dass outfile ein Objekt ist, und der Begriff der !outfile einfach nicht sinnvoll.

Eigentlich, !outfile viele beginnen Programmierer Reisen auf. Sie wissen, dass outfile ist kein Zeiger in diesem Beispielcode, und sie fragen sich, wie man es gegen 0 testen konnten, wie Sie normalerweise nur mit einem Zeiger zu tun. (Denken Sie daran, mit den Worten: !x, woher x ist einige Zeiger, testen Sie x gegen 0.Und), die einfach keinen Sinn macht! Und so, um Verwechslungen zu vermeiden, rufen Sie einfach fehlschlagen(). Es macht mehr Sinn.

Hier sind einige der Gründe, Ihre Dateierstellung ersticken kann:

  • Das Verzeichnis ist nicht vorhanden.

  • Sie sind aus Festplattenspeicher und kein Glück.

  • Ihre Anwendung nicht die richtigen Berechtigungen, eine Datei zu erstellen.

  • Der Dateiname war ungültig - das heißt, es Zeichen enthalten das Betriebssystem erlaubt es nicht, in einem Dateinamen wie * oder?.

Wie jeder gute Anwendung, sollten Sie Ihre Anwendung zwei Dinge tun:

  1. 1.Überprüfen Sie, ob eine Datei Schöpfung gelungen.

  2. 2.Wenn die Datei konnte nicht erstellt werden, behandeln sie entsprechend.

    Drucken Sie nicht nur eine schreckliche Nachricht wie Ups! Aborting!, Ihre schlechte Benutzer keine andere Wahl zu verlassen, sondern den Monitor auf den Boden zu werfen. Stattdessen tun Sie etwas freundlicher - wie eine Nachricht präsentiert ihnen zu sagen, es gibt ein Problem und was darauf hindeutet, dass sie mehr Speicherplatz freigeben könnte.

Menü