2016-05-06 14 views
1

kopiert Hallo Leute, ich versuche, ein Programm zu machen, welches binäre Dateien (die Werte) von der Quelle zum Ziel kopiert. aber ich habe einen fehler und ich weiß nicht wie ich das lösen soll, wie kann ich den code vervollständigen?wie man binäre Dateien in c

int main(int argc, char ** argv) 
{ 
    FILE * source, *target; 
    int numr, numw; 
    char buffer[100]; 


    source = fopen(argv[1], "rb"); 
    target = fopen(argv[2], "rb"); 
    if ((source = fopen(argv[1], "rb")) == NULL) 
    { 
     printf("open read file error.\n"); 
     return 0; 
    } 

    while (feof(source) == 0) 
    { 
     if ((numr = fread(buffer, 1, 100, source)) != 100) 
     { 
      if (ferror(target) != 0) 
      { 
       printf("read file error.\n"); 
       return 0; 
      } 
     } 
     fwrite(buffer, 1, numr, target); 
     if ((numw = fwrite(buffer, 1, numr, target)) != numr) 
     { 
      printf("write file error.\n"); 
      return 0; 
     } 
    } 

    fclose(source); 
    fclose(target); 

    return 0; 
} 
+4

für eine Sache, die ich vermute, Sie wollen das Ziel öffnen mode '" wb "' ... –

+3

Es wäre nett, wenn Sie speziell angeben, welche Fehlermeldungen Sie erhalten und wo Sie sie erhalten. – Fjotten

+3

Außerdem öffnest du die Quelle zweimal (was kein Problem verursacht) und schreibst jeden Block zweimal (was dir ein ziemliches Problem bereiten wird). –

Antwort

1

Zuerst werden Sie die Quelldatei nicht zweimal öffnen. Entfernen Sie einfach den ersten oder zweiten fopen aus dem Code.

source = fopen(argv[1], "rb"); 
    if (source == NULL) 
    { 
     printf("open read file error.\n"); 
     return 0; 
    } 

Auch Zieldatei mit "w" öffnen und auf Erfolg prüfen.

target = fopen(argv[2], "a+w"); 
    if (target == NULL) 
    { 
     fclose(source); 
     printf("open target file error.\n"); 
     return 0; 
    } 

Auch brauchen Sie nicht, um zu überprüfen, dass fread 100 zurück, wenn es etwas falsch ist, ferror() wird für Sie Fehler erkennen.

 numr = fread(buffer, 1, 100, source); 
     if (ferror(target) != 0) 
     { 
      printf("read file error.\n"); 
      break; 
     } 

Auch Sie müssen Schreibfunktion benutzen, wenn

 numw = fwrite(buffer, sizeof(char), numr, target); 
     if (numw != numr) 
     { 
      printf("write file error.\n"); 
      break; 
     } 

ich Ihren Code bearbeitet und jetzt funktioniert es gut ...

int main(int argc, char ** argv) 
{ 
    FILE *source, *target; 
    int numr, numw; 
    char buffer[101]; 

    source = fopen(argv[1], "rb"); 
    if (source == NULL) 
    { 
     printf("open read file error.\n"); 
     return 0; 
    } 

    target = fopen(argv[2], "a+w"); 
    if (target == NULL) 
    { 
     fclose(source); 
     printf("open target file error.\n"); 
     return 0; 
    } 

    while (feof(source) == 0) 
    { 
     memset(buffer, 0, sizeof(buffer)); 
     numr = fread(buffer, 1, 100, source); 
     if (ferror(target) != 0) 
     { 
      printf("read file error.\n"); 
      break; 
     } 

     numw = fwrite(buffer, sizeof(char), numr, target); 
     if (numw != numr) 
     { 
      printf("write file error.\n"); 
      break; 
     } 
    } 

    fclose(source); 
    fclose(target); 

    return 0; 
} 
+0

, die nicht funktioniert – danielwinzard

+0

@danielwinzard sind Sie sicher? Nur getestet auf meinem PC für die 10-mal .. –

+1

http://StackOverflow.com/Questions/5431941/Why-Is-Whe-feof-File-Always-Wrong –