2016-06-24 2 views
0

일련의 파일을 받아 다른 파일로 복사하는 프로그램을 만들려고합니다. 다른 파일로 파일 목록 병합

위한

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

arch1.txt arch2.txt, archN.txt의 내용 arch3.txt 생성한다.

#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; 
} 

내 OUPUT :

가 열려 있지 파일을 쓸 수있다 : 당신이 사용하고 있기 때문이다

+0

는'앞으로 http://stackoverflow.com/a/3898070/5781248 –

답변

0

해결했습니다. 그것은 꽤 아니지만 그것은 지금 작동합니다. 당신이 [1] ', 또는 단지 장소 반복 방법 주어진 -`argv에서 시작 싶어 있도록

#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

./foobar * argv를

내 코드입니다 fopen()의 filename 매개 변수에 대해. argv [argc-1]이어야합니다.

+0

코드의 반복을 참조하십시오 argv ++''fopen()'을 호출하기 전에 – Clifford

1

*argv은 첫 번째 인수가 아니라 실행 파일의 경로입니다.

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

혹은보다 효율적으로 사용하는 배열 인덱싱 및 argv[1]에서 시작을 :

증가의 변수는 argv 한 번 직접 사용하기 전에.