Heim >Backend-Entwicklung >C++ >Wie kann ich Binärdateien in C effizient kopieren oder ändern?

Wie kann ich Binärdateien in C effizient kopieren oder ändern?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 03:41:14634Durchsuche

How Can I Efficiently Copy or Modify Binary Files in C  ?

Binärdatei-Eingabe/Ausgabe

In C umfasst das Lesen und Schreiben von Binärdateien die Verwendung spezifischer Datei-Eingabe-/Ausgabemechanismen zur Verarbeitung von Binärdaten. Während der bereitgestellte Code versucht, dies zu erreichen, tritt ein Problem auf, bei dem der Ausgabepuffer nur einen begrenzten Teil des Dateiinhalts erfasst.

C-Lösung:

Für a Für einen effizienteren und C-konformeren Ansatz sollten Sie den folgenden Codeausschnitt verwenden:

#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)
    );
}

In diesem überarbeiteten Code wird die Funktion std::copy verwendet um den Inhalt der Binärdatei effizient von der Eingabe-Stream-Eingabe zur Ausgabe-Stream-Ausgabe zu übertragen. Dieser Ansatz stellt sicher, dass der gesamte Inhalt von Final.gif korrekt in myfile.gif kopiert wird.

Alternative Pufferlösung:

Wenn Sie Zugriff auf die Daten in a benötigen Puffer für Änderungen können Sie den folgenden Code verwenden:

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

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

    // Copies entire file into a buffer
    std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(input), {});
}

Hier wird der gesamte Inhalt der Eingabedatei in einen Vektorpufferpuffer eingelesen, Ermöglicht Änderungen an den Binärdaten vor möglichen Ausgabevorgängen.

Das obige ist der detaillierte Inhalt vonWie kann ich Binärdateien in C effizient kopieren oder ändern?. 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