Heim >Backend-Entwicklung >C++ >Wie lese ich Dateiinhalte als Zeichenarray in C mit ifstream::read() und istreambuf_iterator?

Wie lese ich Dateiinhalte als Zeichenarray in C mit ifstream::read() und istreambuf_iterator?

DDD
DDDOriginal
2024-11-01 00:57:02458Durchsuche

How to read file contents as a character array in C   using ifstream::read() and istreambuf_iterator?

So lesen Sie Dateiinhalte als Zeichenarray in C

Hintergrund

Diese Frage fragt, wie ein Zeichen-Array-Puffer mit den Bytes einer Datei namens inputFile gefüllt wird. Der Benutzer ist auf Schwierigkeiten mit anderen vorgeschlagenen Ansätzen gestoßen, die getline() anstelle von ifstream::read() verwenden.

Lösung

Es gibt einige Ansätze, um dieses Problem zu beheben Aufgabe:

Verwenden von ifstream::read()

Diese Methode beinhaltet:

  1. Öffnen der Datei:Verwenden Sie std::ifstream, um die Datei im Binärmodus zu öffnen, um Zeichenübersetzungen zu vermeiden.
  2. Bestimmen der Dateigröße :Verwenden Sie seeng() und tellg(), um die Dateilänge zu erhalten.
  3. Lesen Daten: Rufen Sie read() auf, um den Dateiinhalt in den Puffer einzulesen und sicherzustellen, dass die Puffergröße ausreichend ist.

Beispielcode:

<code class="cpp">// Open file in binary mode
std::ifstream infile("C:\MyFile.csv", std::ios_base::binary);

// Get file length
infile.seekg(0, std::ios::end);
size_t length = infile.tellg();
infile.seekg(0, std::ios::beg);

// Read file
infile.read(buffer, length);</code>

Verwendung von istreambuf_iterator

Dieser Ansatz ist moderner und verwendet Iteratoren zum Lesen der Datei:

  1. Erstellen Sie einen Istreambuf_iterator: Weisen Sie std::istreambuf_iterator(infile) dem Anfangsiterator und std::istreambuf_iterator() dem Enditerator zu .
  2. Vektor verwenden zum Speichern von Zeichen: Erstellen Sie einen Vektor std::vector und schiebe alle Zeichen vom Anfangs- bis zum End-Iterator in den Vektor.
  3. Vektor in Array kopieren: Weisen Sie die Vektordaten dem Puffer mit std::copy zu.

Beispiel Code:

<code class="cpp">// Create iterators
std::istreambuf_iterator<char> begin(infile);
std::istreambuf_iterator<char> end;

// Create vector
std::vector<char> contents(begin, end);

// Copy vector to array
std::copy(contents.begin(), contents.end(), buffer);</code>

Überlegungen

  • Dateigrößenbeschränkungen: ifstream::read() kann den Puffer überlaufen lassen wenn die Dateigröße ihre Größe überschreitet. Erwägen Sie stattdessen die Verwendung von gepufferten Lesevorgängen oder skalierbaren Puffern.
  • Fehlerbehandlung: Überprüfen Sie nach Leseversuchen mit infile.fail() oder infile.eof() auf mögliche Lesefehler.
  • Binärmodus: Wenn die Datei Nicht-ASCII-Zeichen enthält, öffnen Sie sie im Binärmodus, um das Original beizubehalten Kodierung.

Das obige ist der detaillierte Inhalt vonWie lese ich Dateiinhalte als Zeichenarray in C mit ifstream::read() und istreambuf_iterator?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn