Lecture et écriture de fichier binary

J’essaie d’écrire du code pour lire un fichier binary dans un tampon, puis écrire le tampon dans un autre fichier. J’ai le code suivant, mais le tampon stocke seulement quelques caractères ASCII de la première ligne du fichier et rien d’autre.

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

Si vous voulez faire cela de la manière C ++, faites comme ceci:

 #include  #include  #include  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(input), std::istreambuf_iterator( ), std::ostreambuf_iterator(output)); } 

Si vous avez besoin de ces données dans un tampon pour le modifier, faites ceci:

 #include  #include  #include  int main() { std::ifstream input( "C:\\Final.gif", std::ios::binary ); // copies all data into buffer std::vector buffer(( std::istreambuf_iterator(input)), (std::istreambuf_iterator())); } 
  sizeof(buffer) == sizeof(char*) 

Utilisez plutôt la longueur.

Aussi, mieux vaut utiliser fopen avec ” wb ” ….

Voici un court exemple, le moyen C ++ utilisant rdbuf . Je l’ai eu du web. Je ne trouve pas ma source originale à ce sujet:

 #include  #include  int main () { std::ifstream f1 ("C:\\me.txt",std::fstream::binary); std::ofstream f2 ("C:\\me2.doc",std::fstream::trunc|std::fstream::binary); f2< 

sizeof (buffer) est la taille d’un pointeur sur votre dernière ligne, PAS la taille réelle du tampon. Vous devez utiliser “length” que vous avez déjà établi à la place

Vous devez passer la longueur dans fwrite au lieu de sizeof (buffer).

Il y a une manière beaucoup plus simple. Cela ne fait rien si c’est un fichier binary ou texte.

Utilisez noskipws.

 char buf[SZ]; ifstream f("file"); int i; for(i=0; f >> noskipws >> buffer[i]; i++); ofstream f2("writeto"); for(int j=0; j < i; j++) f2 << noskipws << buffer[j]; 

Je ne comprends pas sérieusement pourquoi quelqu’un choisirait d’écrire un code si compliqué quand cela peut arriver avec des commandes aussi simples dans l’extrait suivant.

Copie le fichier entier de n’importe quelle taille. Pas de contrainte de taille!

Utilisez simplement ceci. Testé Et Travailler !!

 #include #include using namespace std; int main() { ifstream infile; infile.open("source.pdf",ios::binary|ios::in); ofstream outfile; outfile.open("temppdf.pdf",ios::binary|ios::out); int buffer[2]; while(infile.read((char *)&buffer,sizeof(buffer))) { outfile.write((char *)&buffer,sizeof(buffer)); } infile.close(); outfile.close(); return 0; } 

Avoir une taille de mémoire tampon plus petite serait utile pour copier de petits fichiers. Même “char buffer [2]” ferait l’affaire.