Maison >développement back-end >C++ >Comment puis-je copier ou modifier efficacement des fichiers binaires en C ?

Comment puis-je copier ou modifier efficacement des fichiers binaires en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-29 03:41:14634parcourir

How Can I Efficiently Copy or Modify Binary Files in C  ?

Entrée/sortie de fichier binaire

En C, la lecture et l'écriture de fichiers binaires impliquent l'utilisation de mécanismes d'entrée/sortie de fichier spécifiques pour gérer les données binaires. Bien que le code fourni tente d'y parvenir, il rencontre un problème où le tampon de sortie ne capture qu'une partie limitée du contenu du fichier.

Solution C :

Pour un approche plus efficace et conforme au C, envisagez d'utiliser l'extrait de code suivant :

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

Dans ce code révisé, la fonction std::copy est utilisée pour transférer efficacement le contenu du fichier binaire de l'entrée du flux d'entrée à la sortie du flux de sortie. Cette approche garantit que l'intégralité du contenu de Final.gif est copié avec précision dans myfile.gif.

Solution de mise en mémoire tampon alternative :

Si vous avez besoin d'accéder aux données dans un tampon pour les modifications, vous pouvez utiliser le code suivant :

#include <fstream>
#include <iterator>
#include <vector>

int main() {
    std::ifstream input("C:\Final.gif", std::ios::binary);

    // Copies entire file into a buffer
    std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(input), {});
}

Ici, tout le contenu du fichier d'entrée est lu dans un tampon tampon vectoriel, permettant modifications des données binaires avant d'éventuelles opérations de sortie.

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!

Déclaration:
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