Heim >Backend-Entwicklung >C++ >Wie kann ich Binärdateien in C effizient lesen und schreiben und dabei Pufferprobleme vermeiden?

Wie kann ich Binärdateien in C effizient lesen und schreiben und dabei Pufferprobleme vermeiden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-12 20:45:14258Durchsuche

How Can I Efficiently Read and Write Binary Files in C   Avoiding Buffering Issues?

Binärdateien effektiv lesen und schreiben

Der Versuch, Binärdateien zu lesen und zu schreiben, bringt oft Herausforderungen mit sich, beispielsweise wenn der resultierende Puffer nur eine enthält Bruchteil der beabsichtigten Daten. Wenn dieses Problem auftritt, bietet dieser Artikel zwei alternative Ansätze, die diese Einschränkungen beheben.

C-spezifischer Ansatz

Der folgende C-Code verwendet die Kopie Funktions- und Stream-Iteratoren zum direkten Kopieren des Dateiinhalts ohne Pufferung:

#include <fstream>
#include <iterator>
#include <algorithm>

int main()
{
    std::ifstream input("C:\Final.gif", std::ios::binary);
    std::ofstream output("C:\myfile.gif", std::ios::binary);

    std::copy(
        std::istreambuf_iterator<char>(input),
        std::istreambuf_iterator<char>(),
        std::ostreambuf_iterator<char>(output));
}

Dieser Ansatz behält die bei die Integrität der Datei und gewährleistet eine genaue Datenübertragung.

Pufferung mit einem Vektor

Wenn Sie den Inhalt der Datei für Änderungen in einem Puffer benötigen, verwendet der folgende Code ein Vektor und Stream-Iteratoren:

#include <fstream>
#include <iterator>
#include <vector>

int main()
{
    std::ifstream input("C:\Final.gif", std::ios::binary);

    // Copies all data into buffer
    std::vector<unsigned char> buffer(
        std::istreambuf_iterator<char>(input), {});
}

Mit dieser Lösung können Sie den Inhalt der Datei bearbeiten im Speicher, bevor sie in die gewünschte Ausgabedatei geschrieben werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Binärdateien in C effizient lesen und schreiben und dabei Pufferprobleme vermeiden?. 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