2013-05-06 2 views
2

파일 (작은 보관함을 원한다)을 열려고하는데 그 안에 다른 파일 내용을 복사하려고합니다. 코드는 다음과 같습니다.C - 파일을 읽고 다른 사람에게 데이터 추가하기

FILE * arch; 
FILE * par; 

void read_words (FILE *f) 
{ 
char x[1024]; 
while (fscanf(f," %s",x)==1) 
    { 
    fprintf(arch," %s", x); 
    } 
} 

int main(int argc, char * argv[]) 
{ 
char * nome; 
nome = argv[1]; 

archivio = scrivi(getcwd(NULL, 0), nome); 
arch = fopen(archivio, "w+"); 

par = fopen(argv[2], "r+"); 

read_words(par); 

return 0; 
} 

"archivio"는 작업 경로라고 가정하십시오.

나는 함수를 다음과 같이 호출한다 : ./a.out archiveName FilePath.

내가하고 싶은 일은,이 파일을 열고, 다른 파일을 열고 아카이브에 내용을 쓰는 것입니다.
문제는 read_words 함수에 있습니다. 그것은 혼자서 취한다면 작동합니다 (여기에서 코드를 가져 왔습니다). 그러나 여기에 코드를 삽입하면 작동하지 않습니다. while (fscanf(f," %s",x)==1)에도 들어 가지 않기 때문입니다. 실제로 아카이브 파일은 항상 비어 있습니다.

이유를 찾도록 도와 줄 수 있습니까?

감사

추신 :
La funzione mkbkp si occupa della creazione di un archivio contenente i file e le cartelle passate come parametri.

이상한 것은 당신 만 read_words와 C 파일을 만들 경우, 그것은 잘 작동한다는 것입니다 : 이것은 내가 삽입을 시도 예를 들어 텍스트입니다.

+0

어떤 의미에서 작동하지 않습니까? –

+0

어떤 방식으로 작동하지 않는지 말씀해 주시겠습니까? –

+0

이 코드가 길다고 생각하십니까? – Barmar

답변

1

당신이 프로그램의 동작을 설명하는 방법을 감안할 때, 나는 당신이 읽고 자하는 파일을 읽지 않는다고 가정 할 수 있습니다. 이 기능을 사용해보십시오 :

void show_file (const char *filename, FILE *out) { 
    int c; 
    FILE *file; 
    fprintf(out, "%s(%s) BEGIN\n", __func__, filename); 
    file = fopen(filename, "r"); 
    if (file) { 
     while ((c = fgetc(file)) != EOF) { 
      fputc(c, out); 
     } 
     fclose(file); 
    } else { 
     fprintf(out, "%s: failed to open file '%s' (%d)\n", __func__, filename, errno); 
    } 
    fprintf(out, "%s(%s) END\n", __func__, filename); 
} 

당신이처럼 main에서이 함수를 호출 할 수 있습니다 :

show_file(argv[2], stderr); 

파일에 있는지 경로를 확인하고 파일의 내용은 여러분의 기대와 일치합니다.

+0

그것은 작동한다! 감사 –

관련 문제