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);
}
  • Dans votre fwrite() appel,le premier paramenter doit être un pointeur vers le contenu du fichier en mémoire(dont je ne vois pas là où vous lu) au lieu de fi lui-même.
  • vous pouvez utiliser open(), read(), write() appel système. c'est plus facile.
InformationsquelleAutor Zach49899 | 2013-01-04