Maison >développement back-end >C++ >Pourquoi mon fichier binaire n'est-il copié que partiellement et comment puis-je y remédier ?
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 );
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)); }
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), {}); }
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!