2016-06-24 6 views
0

Ich versuche ein Programm zu erstellen, das eine Reihe von Dateien nimmt und sie in eine andere kopiert.Eine Liste von Dateien in eine andere zusammenführen

zum Beispiel

./foobar arch1.txt arch2.txt arch3.txt

muss mit dem Inhalt von arch1.txt arch2.txt erstellen arch3.txt, archN.txt.

Dies ist mein Code:

#include <stdio.h> 
#include <stdlib.h> 


void usage (char *argv[], int code) 
{ 
    printf("usage: %s [<file> <out_file>] \n", argv[0]); 
    exit(code); 
} 

void copyFile (FILE *ifp, FILE *ofp) 
{ 
    int c; 

    while ((c = fgetc(ifp)) != EOF) 
     fputc(c, ofp); 
} 

int main(int argc, char *argv[]) 
{ 
    system ("clear"); 

    FILE *fp, *fp2; 

    if (argc < 3) 
     usage(argv, EXIT_FAILURE); 
    else 
     if ((fp2 = fopen(argv[argc-1], "w")) == NULL) { 
        printf("Can't open file to write: %s\n", *argv); 
        exit(EXIT_FAILURE); 
      } 
     while(--argc > 0) 
      printf("%d",argc); 
      if ((fp = fopen(*++argv, "r")) == NULL) { 
       printf("Can't open file: %s\n", *argv); 
       exit(EXIT_FAILURE); 
      } 
      else { 
       copyFile(fp, fp2); 
       fclose(fp); 
       fclose(fp2);  
      } 
     return 0; 
} 

Mein ouput:

Datei kann nicht geöffnet schreiben: ./foobar

+0

Siehe http://stackoverflow.com/a/3898070/5781248 –

Antwort

0

Ich habe es behoben. Es ist nicht schön, aber es funktioniert jetzt.

#include <stdio.h> 
#include <stdlib.h> 

void usage (char *argv[], int code) 
{ 
    printf("usage: %s [<file> <out_file>] \n", argv[0]); 
    exit(code); 
} 

void copyFile (FILE *ifp, FILE *ofp) 
{ 
    int c; 

    while ((c = fgetc(ifp)) != EOF) 
     fputc(c, ofp); 
} 

int main(int argc, char *argv[]) 
{ 
    FILE *f_read, *f_write; 

    int i; 

    if (argc < 3) 
     usage(argv, EXIT_FAILURE); 

    if ((f_write = fopen(argv[argc-1], "w")) == NULL) { 
     printf("Can't write in: %s\n", argv[argc-1]); 
     exit(EXIT_FAILURE); 
    } 

    for (i = 1; i < argc-1; ++i) 
    { 
     if ((f_read = fopen(argv[i], "r")) == NULL) { 
       printf("Can't open file: %s\n", argv[i]); 
       exit(EXIT_FAILURE); 
      } 
      else 
       copyFile(f_read, f_write); 
    } 
    fclose(f_read); 
    fclose(f_write); 
    return 0; 
} 
1

Das ist, weil Sie * argv verwenden sind für den Parameter filename in fopen(). Es sollte argv [argc - 1] sein.

+0

Des Code durch nach vorne, so dass Sie bei -'argv starten wollen würden [1] ', oder angesichts der Iterationsmethode nur Platz' argv ++ 'vor dem Aufruf von' fopen() ' – Clifford

1

*argv ist nicht das erste Argument, sondern der Pfad der ausführbaren Datei.

Erhöhungsschritte argv einmal, bevor es direkt mit:

argv++ ; 
    if ((fp2 = fopen(argv[argc-1], "w")) == NULL) { 

oder vielleicht eine bessere Nutzung der Array-Indizierung und starten von argv[1].

Verwandte Themen