Wie man eine Datei Zeichen für Zeichen in C++ liest

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Methoden ifstream und get, um eine Datei Zeichen für Zeichen zu lesen
  2. Verwenden Sie die getc-Funktion, um die Datei Zeichen für Zeichen zu lesen
  3. Verwenden Sie die fgetc-Funktion, um die Datei zeichenweise zu lesen
Wie man eine Datei Zeichen für Zeichen in C++ liest

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;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C++ File