Maison > développement back-end > C++ > Pourquoi mon fichier binaire n'est-il copié que partiellement et comment puis-je y remédier ?

Pourquoi mon fichier binaire n'est-il copié que partiellement et comment puis-je y remédier ?

Linda Hamilton
Libérer: 2024-12-14 00:06:11
original
406 Les gens l'ont consulté

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

Lecture et écriture de fichiers binaires

La lecture et l'écriture de fichiers binaires impliquent de travailler avec des données brutes, souvent constituées de codes binaires représentant différents types de données . Une tâche courante consiste à lire les données d'un fichier binaire dans un tampon, puis à les écrire dans un autre fichier.

Problème :

Lors de la tentative de lecture et d'écriture d'un fichier binaire fichier en utilisant le code suivant, seuls quelques caractères ASCII de la première ligne du fichier sont stockés dans le buffer :

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 );
Copier après la connexion

Solution :

Il existe deux manières possibles de résoudre ce problème :

Utiliser des flux C :

Cette méthode implique d'utiliser les classes ifstream et ofstream fournies par la bibliothèque standard C. Il permet une gestion efficace et portable des fichiers.

#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));
}
Copier après la connexion

Utilisation d'un tampon pour la modification :

Si les données doivent être manipulées ou modifiées avant de les écrire dans un fichier, un tampon peut être utilisé pour le stocker.

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

}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal