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. P>
J'utilise Windows. Quelle est la meilleure façon de le faire? P>
7 Réponses :
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;
}
ARRRGGGGG: citations intelligentes !!! quiconque pensait à les appeler intelligent ??? Ce sont des citations stupides ... et ... tailleof (char) code>, par définition, est 1 code>
Que voulez-vous n code> 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.
Assurez-vous d'ouvrir les fichiers avec l'option O_Binary si vous utilisez Ouvrir () code> et des descripteurs de fichier, ou avec la lettre "B" dans la chaîne de mode si vous utilisez fopen () code>. 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. P>
Ouvrir CODE> est une fonction POSIX et Windows n'est pas POSIX.
et enfin fermer les fichiers p> amusez-vous! p> p> fopen Code> Les fichiers d'entrée et de sortie avec le mode binaire p> fread code> et fwrite code> p>
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
s_iwrite code> est incorrect. Vous devez également spécifier des autorisations de lecture et d'exécution.
DV à cause de vide principal () code>, fflush (stdin); code>, obtient (s_file); code>, obtient (d_file); / code>. En outre, écrire (Out_handle, buf, len); code> pourrait renvoyer un nombre court, indiquant qu'une partie de buf code> a été écrite. Vous ne testez que pour l'erreur d'écriture.
#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;
}
Bien que cela ne soit pas la solution meilleure i>, il serait au moins une solution correcte si C code> a été défini avec type int code>.
Vous pouvez utiliser ceci pour copier des fichiers binaires:
Beaucoup de problèmes: pourquoi diviser le code dans 2 fonctions distinctes utilisant différentes API? Type int code> est inapproprié pour une taille de fichier (bien que dans Microsoft Windows, int code> et long code> ont la même taille ...) Aucun test pour fopen () code> ou Ouvrir code> échec. Aucun test pour malloc () code> échec. 3ème argument manquant à Ouvrir code> avec O_CREAT code> drapeau. Aucun test sur lire code> ni écrire code>. Pas de valeur de retour utile ...
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.