6
votes

Copier des fichiers binaires

J'essaie de déterminer comment copier des fichiers binaires d'un endroit à un autre .exe's. Je n'arrive pas à trouver des solutions pour apprendre.

J'utilise Windows. Quelle est la meilleure façon de le faire?

c

1 commentaires

Vous devriez publier tout ce que vous avez essayé, afin que nous puissions avoir une idée de comment aider - c'est une opération assez facile dans la plupart des langages de programmation.


7 Réponses :


-4
votes

http://www.cs.bu.edu/teaching / C / FILE-IO / INTRO /

#include <ctype.h>
#include <stdio.h>
#define BUFSIZE 1024

int main(int argc, char **argv)
{
charmybuf[BUFSIZE] = { 0 }, *p = NULL;
FILE *ifd = NULL, *ofd = NULL;
ifp = fopen( argv[1], “r” );
ofp = fopen( argv[2], “w” );
assert(ifp!=NULL);
assert(ofp!=NULL);
while ( ( n = fread( mybuf, sizeof(char), BUFSIZE ,ifd) ) > 0 )
{
    fwrite(mybuf, sizeof(char),BUFSIZE,ofd);
}
fclose(ifd);
fclose(ofd);
return 0;
}


3 commentaires

ARRRGGGGG: citations intelligentes !!! quiconque pensait à les appeler intelligent ??? Ce sont des citations stupides ... et ... tailleof (char) , par définition, est 1


Que voulez-vous n pour? Vous ne l'utilisez jamais pour rien.


Besoin de spécifier le mode binaire ("RB" et "WB") pour que cela fonctionne correctement sur les systèmes (comme Windows) qui distinguent un fichier texte et binaire "S; Et vous écrivez des ordures si le fichier n'est pas un multiple exact de bufsize octets.



2
votes

Assurez-vous d'ouvrir les fichiers avec l'option O_Binary si vous utilisez Ouvrir () et des descripteurs de fichier, ou avec la lettre "B" dans la chaîne de mode si vous utilisez fopen () . Notez que O_Binary n'est pas standard sauf sur Windows; Cependant, vous pouvez le traiter (ou le définir) comme 0 sur UNIX et tout ira bien. Si vous utilisez une API Windows pure, assurez-vous que vous faites l'équivalent - assurez-vous de préciser que le fichier est traité comme un fichier binaire.


1 commentaires

Ouvrir est une fonction POSIX et Windows n'est pas POSIX.



11
votes

Que voulez-vous dire "meilleur moyen"? Je pense que c'est la voie la plus simple ... j'espère que c'est ce que vous vouliez dire :)

fopen Les fichiers d'entrée et de sortie avec le mode binaire xxx

fread et fwrite xxx

et enfin fermer les fichiers xxx

amusez-vous!


0 commentaires


-1
votes

Vous pouvez utiliser la fonction de 'DOS.H' pour une opération IO de bas niveau. Le code suivant illustrer l'utilisation d'eux. J'espère qu'il sera utile xxx


2 commentaires

s_iwrite est incorrect. Vous devez également spécifier des autorisations de lecture et d'exécution.


DV à cause de vide principal () , fflush (stdin); , obtient (s_file); , obtient (d_file); / code>. En outre, écrire (Out_handle, buf, len); pourrait renvoyer un nombre court, indiquant qu'une partie de buf a été écrite. Vous ne testez que pour l'erreur d'écriture.



-3
votes
#include<stdio.h>
#include<stdlib.h>
int main()
{
     FILE *fp1,*fp2;
     char c;
     fp1=fopen("source file","rb");
     if(fp1==NULL)
       exit(1);
     fp2=fopen("destination file","wb");
     if(fp2==NULL)
       exit(1);
     while((c=fgetc(fp1))!=EOF)
          fputc(c,fp2);
     fclose(fp1);
     fclose(fp2);
     return 0;
}

1 commentaires

Bien que cela ne soit pas la solution meilleure , il serait au moins une solution correcte si C a été défini avec type int .



0
votes

Vous pouvez utiliser ceci pour copier des fichiers binaires: xxx


1 commentaires

Beaucoup de problèmes: pourquoi diviser le code dans 2 fonctions distinctes utilisant différentes API? Type int est inapproprié pour une taille de fichier (bien que dans Microsoft Windows, int et long ont la même taille ...) Aucun test pour fopen () ou Ouvrir échec. Aucun test pour malloc () échec. 3ème argument manquant à Ouvrir avec O_CREAT drapeau. Aucun test sur lire ni écrire . Pas de valeur de retour utile ...