Heim > Backend-Entwicklung > C++ > Warum wird meine Binärdatei nur teilweise kopiert und wie kann ich das Problem beheben?

Warum wird meine Binärdatei nur teilweise kopiert und wie kann ich das Problem beheben?

Linda Hamilton
Freigeben: 2024-12-14 00:06:11
Original
404 Leute haben es durchsucht

Why Does My Binary File Copy Only Partially, and How Can I Fix It?

Lesen und Schreiben von Binärdateien

Das Lesen und Schreiben von Binärdateien erfordert die Arbeit mit Rohdaten, die häufig aus Binärcodes bestehen, die verschiedene Datentypen darstellen . Eine häufige Aufgabe besteht darin, Daten aus einer Binärdatei in einen Puffer zu lesen und sie dann in eine andere Datei zu schreiben.

Problem:

Beim Versuch, eine Binärdatei zu lesen und zu schreiben Wenn Sie die Datei mit dem folgenden Code erstellen, werden nur wenige ASCII-Zeichen aus der ersten Zeile der Datei in der Datei gespeichert Puffer:

int length;
char * buffer;

ifstream is;
is.open ("C:\Final.gif", ios::binary );
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();

FILE *pFile;
pFile = fopen ("C:\myfile.gif", "w");
fwrite (buffer , 1 , sizeof(buffer) , pFile );
Nach dem Login kopieren

Lösung:

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

Verwendung von C-Streams:

Diese Methode beinhaltet die Verwendung der Klassen ifstream und ofstream, die von der C-Standardbibliothek bereitgestellt werden. Es ermöglicht eine effiziente und portable Dateiverwaltung.

#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));
}
Nach dem Login kopieren

Verwenden eines Puffers zur Änderung:

Wenn die Daten manipuliert oder geändert werden müssen, bevor sie in einen geschrieben werden Datei kann ein Puffer zum Speichern verwendet werden.

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

}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird meine Binärdatei nur teilweise kopiert und wie kann ich das Problem beheben?. 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