Heim > Backend-Entwicklung > C++ > Hauptteil

Wie lese ich eine gesamte Datei in C effizient in einen String ein?

Susan Sarandon
Freigeben: 2024-10-30 11:17:02
Original
441 Leute haben es durchsucht

How to Read an Entire File into a String Efficiently in C  ?

Effizientes Einlesen von Dateiinhalten in einen String in C

Ähnlich wie bei Skriptsprachen wie Perl ist es von Vorteil, die Inhalte abrufen zu können einer gesamten Datei und speichern Sie sie in einer einzelnen Variablen in C . Dies kann den Code vereinfachen und die Leistung verbessern. In diesem Beitrag werden wir den effizientesten Ansatz untersuchen, um dieses Ziel zu erreichen.

Die traditionelle Methode in C besteht darin, die Funktionen std::ifstream und std::getline() zu verwenden. Dies erfordert jedoch das iterative Lesen der Datei Zeile für Zeile, was bei großen Dateien ineffizient sein kann.

Eine effizientere Lösung ist die Verwendung der Klasse std::istreambuf_iterator. Diese Klasse stellt eine Iteratorschnittstelle für den Inhalt eines Streams bereit, sodass wir den gesamten Stream in einem einzigen Vorgang in einen String einlesen können.

Hier ist ein Beispielcode, der diesen Ansatz demonstriert:

<code class="cpp">#include <fstream>
#include <string>

int main(int argc, char** argv) {
  std::ifstream ifs("myfile.txt");
  std::string content((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
  return 0;
}</code>
Nach dem Login kopieren

In diesem Code wird die Inhaltsvariable mit dem Inhalt der Datei „myfile.txt“ initialisiert. Der Ausdruck (std::istreambuf_iterator(ifs)) erstellt einen Eingabeiterator, der den Inhalt der Datei liest, während der Ausdruck (std::istreambuf_iterator()) einen Enditerator erstellt, um das Ende der Datei zu markieren. Anschließend wird die Zuweisungsfunktion aufgerufen, um den Inhalt des Eingabeiterators in die Inhaltszeichenfolge zu kopieren.

Alternativ können Sie die Methode content.assign direkt verwenden, ohne eine temporäre Zeichenfolgenvariable zu erstellen, wie unten gezeigt:

<code class="cpp">std::ifstream ifs("myfile.txt");
std::string content;
content.assign((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));</code>
Nach dem Login kopieren

Dieser optimierte Ansatz vermeidet den Aufwand, die Datei Zeile für Zeile iterativ zu lesen, was sie insbesondere bei großen Dateien deutlich effizienter macht.

Das obige ist der detaillierte Inhalt vonWie lese ich eine gesamte Datei in C effizient in einen String ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!