La copie d'un fichier en C avec fwrite
Je suis nouvelle C et était d'essayer d'écrire un programme juste pour copier un fichier afin que je puisse apprendre les rudiments de fichiers. Mon code prend un fichier en entrée, les chiffres sur sa longueur par la soustraction de son début à sa fin utiliser fseek et ftell. Puis, il utilise fwrite à écrire, basé sur ce que j'ai pu obtenir à partir de sa page de man, l'UN des éléments de données, (FIN - DÉBUT) éléments de long, pour le flux pointé par l'extérieur, l'obtention de l'emplacement donné par FI. Le problème est que, bien qu'il ne produit pas de "sortie de copie," le fichier n'est pas le même que l'original. Ce que je fais mal? J'ai essayé de lire le fichier d'entrée dans une variable et de l'écriture à partir de là, mais cela n'a pas aide non plus. Ce que je fais mal?
Grâce
int main(int argc, char* argv[])
{
FILE* fi = fopen(argv[1], "r"); //create the input file for reading
if (fi == NULL)
return 1; //check file exists
int start = ftell(fi); //get file start address
fseek(fi, 0, SEEK_END); //go to end of file
int end = ftell(fi); //get file end address
rewind(fi); //go back to file beginning
FILE* out = fopen("copy output", "w"); //create the output file for writing
fwrite(fi,end-start,1,out); //write the input file to the output file
}
Si cela fonctionne?
{
FILE* out = fopen("copy output", "w");
int* buf = malloc(end-start); fread(buf,end-start,1,fi);
fwrite(buf,end-start,1,out);
}
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas la façon dont
fwrite
œuvres.Copie d'un fichier, vous devez généralement allouer un tampon, puis utilisez
fread
, la lecture de la mémoire tampon de données, suivie parfwrite
à écrire que les données de retour. Répétez jusqu'à ce que vous avez copié le fichier entier. Typique code est quelque chose sur cet ordre:.pdf,.docx
(je dis ce sont des non régulières, mais elles sont aussi régulières) etc. les fichiers.fopen(filename, "rb");
pour le fichier que vous êtes en train de lire, etfopen(filename, "wb");
pour le fichier que vous avez écrit. Ceci est crucial pour un code portable, bien que sur certains Systèmes d'exploitation (par exemple, Linux), il ne fait aucune différence..pdf, docx
pas pour les binaires.Le premier paramètre de fwrite est un pointeur vers les données à écrire dans le fichier n'est pas un FICHIER* pour lire. Vous devez lire les données à partir du premier fichier dans un buffer puis écrire que de la mémoire tampon dans le fichier de sortie. http://www.cplusplus.com/reference/cstdio/fwrite/
Peut-être un coup d'oeil par le biais d'un open-source de la copie de l'outil en C serait de vous diriger dans la bonne direction.
Zach49899
: jeter un regard à la fonction de copie.Ici est de savoir Comment Il peut être fait:
Option 1: Dynamique De La "Matrice"
Niveau Imbriqué: 0
Option 2: Char Par Char
Niveau Imbriqué: 1