file input output operations c
Eine Studie zu Dateieingabe-Ausgabeoperationen und Dateizeigerfunktionen in C ++.
Bei der Echtzeitprogrammierung werden große Datenmengen verarbeitet, die von Standard-Eingabe-Ausgabe-Geräten nicht berücksichtigt werden können. Daher müssen wir den Sekundärspeicher zum Speichern von Daten verwenden. Bei Verwendung des Sekundärspeichers speichern wir Daten normalerweise in Form von Dateien.
Wir können Daten aus Dateien lesen oder Daten in Dateien schreiben, indem wir eine Folge von Daten verwenden, die als Streams bezeichnet werden, entweder im Text- oder im Binärformat. Es gibt verschiedene Ein- / Ausgabe- und andere Operationen in Bezug auf Dateien in C ++. In diesem Lernprogramm werden diese Vorgänge in Bezug auf Dateien mit verschiedenen Klassen erläutert.
=> Besuchen Sie hier für die exklusive C ++ - Schulungsserie.
Was du lernen wirst:
Dateieingabe- / Ausgabeklassen in C ++
Wir haben eine iostream-Klasse in C ++ gesehen, die die Standard-Eingabe- und Ausgabefunktionen einschließlich cin und cout definiert. Diese Klasse ist auf die Standard-Eingabe- und Ausgabegeräte wie Tastatur bzw. Monitor beschränkt.
Wenn es um Dateivorgänge geht, verfügt C ++ über einen anderen Satz von Klassen, die verwendet werden können.
Diese Klassen werden wie folgt beschrieben:
- Ofstream: Dateibehandlungsklasse, die den Ausgabedateistream kennzeichnet und zum Schreiben von Daten in Dateien verwendet wird.
- Ifstream: Dateibehandlungsklasse, die den Eingabedateistream angibt und zum Lesen von Daten aus der Datei verwendet wird.
- Fstream: Dateibehandlungsklasse, die sowohl ifstream als auch ofstream verarbeiten kann. Es kann zum Lesen und Schreiben in eine Datei verwendet werden.
Die folgenden Vorgänge werden in C ++ File Handling unterstützt:
- Öffne einen Ordner
- Schließen Sie eine Datei
- Aus einer Datei lesen
- In eine Datei schreiben
Lassen Sie uns jede dieser Operationen im Detail sehen !!
Öffne einen Ordner
Das Zuordnen eines Objekts einer der Stream-Klassen zu einer Datei zum Lesen oder Schreiben oder zu beiden wird als Öffnen einer Datei bezeichnet. Eine geöffnete Datei wird mithilfe dieses Stream-Objekts im Code dargestellt. Daher wird jede Lese- / Schreiboperation, die an diesem Stream-Objekt ausgeführt wird, auch auf die physische Datei angewendet.
Die allgemeine Syntax zum Öffnen einer Datei mit dem Stream lautet:
void open(const char* filename, ios::open mode mode)
Hier,
Dateiname => Die Zeichenfolge, die den Pfad und den Namen der zu öffnenden Datei enthält.
mode => Optionaler Parameter, der den Modus angibt, in dem die Datei geöffnet werden soll.
C ++ unterstützt verschiedene Modi, in denen die Datei geöffnet werden kann. Wir können auch eine Kombination dieser Modi mit dem Operator OR angeben.
Was sind die Lebenszyklusphasen der Softwareentwicklung?
Dateimodus | Beschreibung |
---|---|
ios :: in | Öffnet die Datei im Eingabemodus zum Lesen. |
ios :: out | Öffnet die Datei im Ausgabemodus zum Schreiben von Daten in eine Datei. |
ios :: ate | Legen Sie die Anfangsposition am Ende der Datei fest. Wenn das Flag für das Dateiende nicht gesetzt ist, wird die Anfangsposition auf den Anfang der Datei gesetzt. |
ios :: trunc | Wenn die Datei zum Schreiben geöffnet ist und bereits Inhalt enthält, wird der Inhalt abgeschnitten. |
ios :: app | Öffnet die Datei im Anhänge-Modus, sodass alle Inhalte am Ende der Datei angehängt werden. |
ios :: binary | Öffnet die Datei im Binärmodus. |
Zum Beispiel,Wenn wir eine Datei 'myfile.dat' zum Anhängen von Daten im Binärmodus öffnen möchten, können wir den folgenden Code schreiben.
ofstream myfile;
myfile.open(“myfile.dat”, ios::out|ios::app|ios::binary);
Wie bereits erwähnt, ist der Parameter mode optional. Wenn wir eine Datei öffnen, ohne den zweiten Parameter anzugeben, hat eine Open-Member-Funktion von ofstream, ifstream oder fstream einen Standardmodus zum Öffnen der Datei.
Diese sind wie folgt angegeben:
Welches der folgenden Programme bietet ein Remote-Programm, das wie eine lokale Anwendung aussieht und sich anfühlt?
Klasse | Standardmodus |
---|---|
Ifstream | ios :: in |
ofstream | ios :: out |
Fstream | ios :: in | ios :: out |
Wenn wir also den zweiten Parameter in der Öffnungsfunktion nicht angeben, wird die Datei abhängig von der verwendeten Stream-Klasse im Standardmodus geöffnet.
Eine Datei schließen
Wir können die Schließfunktion verwenden, um eine Datei zu schließen und die in der Datei enthaltenen Ressourcen freizugeben, wenn wir mit den Eingabe- und Ausgabeoperationen für eine Datei fertig sind.
Funktion zum Schließen einer Datei ist:
void close()
Wenn wir mit den Vorgängen für die obige Datei myfile fertig sind, können wir die Datei wie folgt schließen:
myfile.close();
Sobald die Datei mit der Funktion zum Schließen geschlossen wurde, kann das zugeordnete Dateiobjekt erneut zum Öffnen einer anderen Datei verwendet werden.
Lesen aus einer Datei
Mit dem Stream-Extraktionsoperator (>>) können wir die Informationen zeilenweise aus einer Datei lesen. Dies ähnelt dem Lesen von Eingaben von der Standardeingabe mit cin. Der einzige Unterschied besteht darin, dass wir bei Dateien das ifstream- oder fstream-Objekt anstelle von cin verwenden.
Beispielcode zum Lesen aus einer Datei ist unten angegeben:
ifstream myfile; myfile.open(“samp_file.txt”); cout<<”Reading from a file”<>data; cout<Im obigen Code öffnen wir eine Datei und lesen mit dem Stream-Extraktionsoperator (>>) den Inhalt der Datei. Sobald wir mit dem Lesen fertig sind, können wir die Datei schließen.
In eine Datei schreiben
Mit den Dateioperationen können wir auch Daten in eine Datei schreiben. Der Operator, mit dem wir Daten in eine Datei schreiben, ist ein Operator zum Einfügen von Streams (<<). Once again this is the same operator that we use to print data to a standard output device using cout. Difference between the two is that for file related writing we use ofstream or fstream object.
Betrachten wir den folgenden Beispielcode:
char data(100); ofstream myfile; myfile.open(“samp_file.txt”); cout<<”Enter the string to be written to file”<Hier lesen wir eine Zeile aus der Eingabe und schreiben sie in eine Datei, die mit dem ofstream-Objekt geöffnet wurde.
Im folgenden Codebeispiel zeigen wir eine Demonstration aller Dateiverarbeitungsvorgänge.
#include #include using namespace std; int main () { char data(100); // opening a file in write mode. ofstream myfile; myfile.open('E:\message.txt'); cout << 'Writing to the file' << endl; cout << 'Enter your name: '; cin.getline(data, 100); myfile << data << endl; cout <> data; cin.ignore(); myfile << data << endl; // close the opened file. myfile.close(); // opening a file in read mode. ifstream infile; infile.open('E:\message.txt'); cout << 'Reading from a file' <> data; cout << data <> data; cout << data << endl; infile.close(); return 0; }
Ausgabe:
Schreiben in die Datei
Geben Sie Ihren Namen ein: Ved
Geben Sie Ihr Alter ein: 7
Lesen aus einer Datei
Durch
7
Im obigen Programm öffnen wir zuerst eine Datei im Schreibmodus. Dann lesen wir Daten, d. H. Name und Alter, und schreiben sie in eine Datei. Wir schließen dann diese Datei. Als nächstes öffnen wir dieselbe Datei im Lesemodus und lesen die Daten zeilenweise aus der Datei und geben sie auf dem Bildschirm aus.
Somit deckt dieses Programm alle Datei-E / A-Operationen ab.
Dateistatus-Slags
Es gibt einige Mitgliedsfunktionen, mit denen der Status der Datei überprüft wird. Alle diese Funktionen geben einen Booleschen Wert zurück.
Wir haben diese Funktionen wie folgt tabellarisch aufgeführt:
Funktion Beschreibung eof () Gibt true zurück, wenn beim Lesen der Datei das Dateiende erreicht ist. Scheitern() Gibt true zurück, wenn der Lese- / Schreibvorgang fehlschlägt oder ein Formatfehler auftritt Schlecht() Gibt true zurück, wenn das Lesen oder Schreiben in eine Datei fehlschlägt. gut() Gibt false in denselben Fällen zurück, in denen der Aufruf einer der oben genannten Funktionen true zurückgeben würde.
Get / Put und andere spezielle Operationen
Die Datei-E / A-Streams, die wir bisher gesehen haben, haben eine interne Position zum Abrufen und Platzieren, die den anderen E / A-Streams wie iostream ähnlich ist.
Die Klasse ifstream verfügt über eine interne Abrufposition, die die Position des Elements / Zeichens enthält, das bei der nächsten Eingabeoperation in der Datei gelesen werden soll. Die Klasse von stream hat eine interne Put-Position, die die Position des Elements / Zeichens enthält, das in der nächsten Ausgabeoperation geschrieben werden soll.
Übrigens hat fstream sowohl Get- als auch Put-Positionen.
Um das Lesen und Schreiben an diesen Positionen zu erleichtern, verfügen wir über einige Elementfunktionen, mit denen diese Positionen beobachtet und geändert werden können.
Diese Funktionen sind unten aufgeführt:
Funktionen Beschreibung tellg () Gibt die aktuelle Position des Get-Zeigers zurück tellp () Gibt die aktuelle Position des Put-Zeigers zurück seekg (Position) Verschiebungen erhalten ab dem Anfang der Datei einen Zeiger auf die angegebene Position Suche (Versatz, Richtung) Bewegungen erhalten einen Zeiger auf den Versatzwert relativ zu dem durch die Parameterrichtung angegebenen Punkt. seekp (Position) Moves setzen einen Zeiger auf die angegebene Position, beginnend mit dem Anfang der Datei seekp (Versatz, Richtung) Moves setzen einen Zeiger auf den Versatzwert relativ zu dem durch die Parameterrichtung angegebenen Punkt.
Der Parameter Richtung In der obigen Funktion sind Prototypen angegeben aufgezählt Art des Typs seekdir und es bestimmt den Punkt, von dem aus der Versatz gezählt wird.
Es kann die folgenden Werte haben.
ios :: betteln Offset vom Beginn des Streams ios :: cur Versatz von aktueller Position ios :: end Offset vom Ende des Streams
Sehen wir uns ein vollständiges Beispiel an, das die Verwendung dieser Funktionen demonstriert.
Der drahtlose Netzwerkverkehr kann mit Sniffern erfasst werden.
#include #include using namespace std; int main() { fstream myfile; myfile.open('E:\myfile.txt',ios::out); if(!myfile) { cout<<'Cannot create File...'; } else { cout<<'New file created'< Ausgabe:
Neue Datei erstellt
Anfängliche Position des Dateizeigers bei: 34
Nach seekp (-1, ios :: cur), File Pointer Position bei: 33
Nach der Suche (5, ios :: beg), File Pointer at: 5
Nach der Suche (1, ios :: cur), Dateizeiger bei: 6
Wie im obigen Programm gezeigt, haben wir eine Datei erstellt, in die wir eine Textzeile schreiben. Mit den verschiedenen oben beschriebenen Funktionen zeigen wir dann verschiedene Positionen des Dateizeigers an.
Fazit
In diesem Tutorial haben wir die verschiedenen Dateioperationen zum Öffnen, Schließen und Lesen / Schreiben von Daten aus / in eine Datei gesehen.
Wir haben auch die Funktionen zum Ändern des Dateizeigers gesehen, um auf bestimmte Positionen in der Datei zuzugreifen. In unseren nachfolgenden Tutorials werden wir einige weitere wichtige Themen im Zusammenhang mit C ++ diskutieren.
=> Lesen Sie die Easy C ++ - Schulungsserie durch.
Literatur-Empfehlungen
- Grundlegende Eingabe- / Ausgabeoperationen in C ++
- Eingabe-Ausgabe und Dateien in Python (Python öffnen, lesen und in Datei schreiben)
- Grundlegende E / A-Operationen in Java (Eingabe- / Ausgabestreams)
- Dateimanipulation unter Unix: Übersicht über das Unix-Dateisystem
- Unix-Sonderzeichen oder Metazeichen für die Dateimanipulation
- Unix-Dateizugriffsberechtigungen: Unix Chmod, Chown und Chgrp
- VBScript-Dateiobjekte: CopyFile, DeleteFile, OpenTextFile, Read and Write Text File
- Java-Bereitstellung: Erstellung und Ausführung einer Java-JAR-Datei