Wie man eine Datei Zeichen für Zeichen in C++ liest
-
Verwenden Sie die Methoden
ifstream
undget
, um eine Datei Zeichen für Zeichen zu lesen -
Verwenden Sie die
getc
-Funktion, um die Datei Zeichen für Zeichen zu lesen -
Verwenden Sie die
fgetc
-Funktion, um die Datei zeichenweise zu lesen
In diesem Artikel werden verschiedene Methoden zum Lesen einer Textdatei char
für char
in C++ erklärt.
Verwenden Sie die Methoden ifstream
und get
, um eine Datei Zeichen für Zeichen zu lesen
Die gebräuchlichste Art und Weise, mit Datei-I/O in C++ umzugehen, ist die Verwendung von std::ifstream
. Zuerst wird ein ifstream
-Objekt mit dem Argument des Dateinamens initialisiert, der geöffnet werden soll. Beachten Sie, dass die if
-Anweisung prüft, ob das Öffnen einer Datei erfolgreich war. Als nächstes verwenden wir die eingebaute get
-Funktion, um den Text innerhalb der Datei Zeichen für Zeichen abzurufen, und push_back
sie in den vector
-Container. Schließlich geben wir zu Demonstrationszwecken Vektorelemente auf der Konsole aus.
#include <fstream>
#include <iostream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;
int main() {
string filename("input.txt");
vector<char> bytes;
char byte = 0;
ifstream input_file(filename);
if (!input_file.is_open()) {
cerr << "Could not open the file - '" << filename << "'" << endl;
return EXIT_FAILURE;
}
while (input_file.get(byte)) {
bytes.push_back(byte);
}
for (const auto &i : bytes) {
cout << i << "-";
}
cout << endl;
input_file.close();
return EXIT_SUCCESS;
}
Verwenden Sie die getc
-Funktion, um die Datei Zeichen für Zeichen zu lesen
Eine andere Methode, eine Datei zeichenweise zu lesen, ist die Verwendung der getc
Funktion, die den FILE*
Stream als Argument nimmt und das nächste Zeichen liest, falls verfügbar. Als nächstes sollte der Eingabedatei-Stream iteriert werden, bis das letzte Zeichen erreicht ist, und das wird mit der Funktion feof
implementiert, die prüft, ob das Ende der Datei erreicht ist. Beachten Sie, dass es immer empfohlen wird, die offenen Dateistreams zu schließen, sobald sie nicht mehr benötigt werden.
#include <fstream>
#include <iostream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;
int main() {
string filename("input.txt");
vector<char> bytes;
FILE* input_file = fopen(filename.c_str(), "r");
if (input_file == nullptr) {
return EXIT_FAILURE;
}
unsigned char character = 0;
while (!feof(input_file)) {
character = getc(input_file);
cout << character << "-";
}
cout << endl;
fclose(input_file);
return EXIT_SUCCESS;
}
Verwenden Sie die fgetc
-Funktion, um die Datei zeichenweise zu lesen
fgetc
ist eine alternative Methode zu der vorhergehenden Funktion, die genau die gleiche Funktionalität wie getc
implementiert. In diesem Fall wird der Rückgabewert von fgetc
in der if
-Anweisung verwendet, da er die EOF
zurückgibt, wenn das Ende des Dateistreams erreicht ist. Wie empfohlen, schließen wir den Stream vor dem Beenden des Programms mit einem fclose
-Aufruf.
#include <fstream>
#include <iostream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;
int main() {
string filename("input.txt");
vector<char> bytes;
FILE* input_file = fopen(filename.c_str(), "r");
if (input_file == nullptr) {
return EXIT_FAILURE;
}
int c;
while ((c = fgetc(input_file)) != EOF) {
putchar(c);
cout << "-";
}
cout << endl;
fclose(input_file);
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook