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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 11:45:12747Durchsuche

How Can I Efficiently Read and Write Binary Files in C   While Avoiding Data Loss?

Manipulation von Binärdateien: Lesen und Schreiben

Im Bereich der Programmierung kann der Umgang mit Binärdateien einzigartige Herausforderungen darstellen. Eine häufige Aufgabe besteht darin, eine Binärdatei in einen Puffer einzulesen und sie anschließend in eine andere Datei zu schreiben. Bei bestimmten Ansätzen können jedoch Einschränkungen auftreten, die möglicherweise zu Dateninkonsistenzen führen.

Problemstellung

Ein solcher Ansatz umfasst die Verwendung eines char-Array-Puffers und die manuelle Verwaltung der Datei-E/A Operationen. Allerdings führt diese Methode oft zu einem Puffer, der nur wenige ASCII-Zeichen aus der ersten Zeile der Datei erfasst, sodass auf die restlichen Daten nicht zugegriffen werden kann.

Lösung für C

Die Die Programmiersprache C bietet eine robustere und effizientere Möglichkeit zur Manipulation von Binärdateien. Der folgende Code demonstriert einen erweiterten Ansatz:

#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 Code verwendet die Klassen std::ifstream und std::ofstream für Eingabe- und Ausgabevorgänge. Die std::copy-Funktion überträgt effektiv den gesamten Inhalt der Eingabedatei in die Ausgabedatei und spiegelt nahtlos deren Binärdaten wider.

Alternative Lösung für die Pufferung

Wenn Sie Wenn Sie für Änderungen vor dem Schreiben auf die Binärdaten in einem Puffer zugreifen müssen, ziehen Sie den folgenden Ansatz in Betracht:

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

}

Dieser Ansatz verwendet a std::vector, um die Binärdaten zu sammeln, auf die dann bei Bedarf zur Änderung zugegriffen werden kann, bevor sie in eine Zieldatei geschrieben werden.

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