Maison >développement back-end >C++ >Comment puis-je lire et écrire efficacement des fichiers binaires en C tout en évitant la perte de données ?
Manipulation de fichiers binaires : lecture et écriture
Dans le domaine de la programmation, la gestion des fichiers binaires peut présenter des défis uniques. Une tâche courante consiste à lire un fichier binaire dans un tampon, puis à l'écrire dans un autre fichier. Cependant, certaines approches peuvent rencontrer des limitations, conduisant potentiellement à des incohérences de données.
Énoncé du problème
Une de ces approches implique l'utilisation d'un tampon de tableau de caractères et la gestion manuelle des E/S de fichiers. opérations. Cependant, cette méthode aboutit souvent à un tampon qui ne capture que quelques caractères ASCII de la première ligne du fichier, laissant les données restantes inaccessibles.
Solution pour C
La Le langage de programmation C offre un moyen plus robuste et plus efficace de manipuler des fichiers binaires. Le code suivant illustre une approche améliorée :
#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)); }
Ce code utilise les classes std::ifstream et std::ofstream pour les opérations d'entrée et de sortie. La fonction std::copy transfère efficacement l'intégralité du contenu du fichier d'entrée dans le fichier de sortie, reflétant de manière transparente ses données binaires.
Solution alternative pour la mise en mémoire tampon
Si vous nécessitent d'accéder aux données binaires dans un tampon pour les modifier avant de les écrire, considérons l'approche suivante :
#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), {}); }
Cette approche utilise un std::vector pour collecter les données binaires, qui peuvent ensuite être consultées pour modification si vous le souhaitez avant de les écrire dans un fichier de destination.
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!