[C] 파일입출력에 대해서..
글쓴이: gusdo2000 / 작성시간: 월, 2005/10/10 - 9:29오전
키보드에서 읽어서 파일에 저장하기는 장 실행이 되는데..
파일에서 읽어서 터미널에 출력하기와 파일에서 읽어서 파일에 저장하기는 별별 방법을 다 써봐도 실행이 되지 않습니다.
제 생각에는 파일에서 값을 읽어오지 못하는 것 같습니다.
아래 코드에서 제가 잘못한것이 있나요?
#include <stdio.h> int main() { FILE* fp, *fp2; int i; int n =0; char str[100][100]; char str2[100][100]; int c; if( (fp = fopen("/home/happy/study/FILE/file1.txt", "w+")) == NULL ) { fprintf(stderr,"file open failed!\n"); exit(1); } //키보드에서 읽어서 파일에 저장하기 printf(" From Keyboard To File\n"); for(i=0; ;i++) { gets(str[i]); if(str[i][0] == '\0') break; fprintf(fp,"%i. %s\n", i, str[i]); printf("-- %s\n", str[i]); } memset(&str[0],0,sizeof(str)); //파일에서 읽어서 터미널에 출력하기 printf(" From File To Terminal\n"); //방법 #1 i = 0; while( fscanf(fp,"%s\n",&str[i]) != EOF ) { printf("-- %s\n", str[i]); i++; } //방법#2 while( (c = getc(fp)) != EOF ) putchar(chr); //방법 #3 -- get_line()함수는 아래에 정의되어 있습니다. i = 0; while( get_line(fp, str[i]) != EOF ) { printf("-- %s\n", str[i]); fprintf(stdout,"-- %s\n", str[i]); i++; } //파일에서 읽어서 파일에 저장하기 printf(" From File To File\n"); if( (fp2 = fopen("/home/happy/study/FILE/file2.txt", "w")) == NULL ) { fprintf(stderr,"file open failed!\n"); exit(1); } //방법 #1 char buf[128]; for (i = 0, n = 128; n == 128; i++) { fread(buf, 128, 1, fp); n = ftell(fp) - 128 * i; fwrite(buf, n, 1, fp2); } //방법 #2 while( fscanf(fp,"%s\n",&str[i]) != EOF ) { fprintf(fp2,"%s\n", str[i]); i++; } //방법 #3 for (i = 0; i < 4; i++) { fscanf(fp,"%s\n",(char *)&str[i]); strcpy((char *)&str2[i], (char *)&str[i]); fprintf(fp2, "-- %s\n", (char *)&str2[i]); } //방법 #4 while( (c = getc(fp)) != EOF ) putc(c,fp2); //방법 #5 i = 0; while( !feof(fp) ) { fgets(buf, 100, fp); fprintf(fp2,"%s\n", buf); i++; } fclose(fp2); fclose(fp); printf("End...\n"); return 0; } int get_line(FILE* fp, char* s) { char* cp = s; while( (*s=getc(fp)) != EOF ) { if( *s == '\n' ) { *s = '\0'; return 0; } else ++s; if( cp == s ) return EOF; *s = '\0'; } return 0; }
Forums:
파일 오픈할때 r옵션을 주세요.
파일 오픈할때 r옵션을 주세요.
[code:1]fp = fopen("/home/happy
fp = fopen("/home/happy/study/FILE/file1.txt", "w+"))
읽는 파일에 대해서 w+ 옵션을 주었는데요,,,
당근
[code:1]``w+'' Open for reading and wri
otherwise it is truncated
상당히 많은 부분이 잘못되었는데 눈에 띄는 것만 말씀드리죠.1.
상당히 많은 부분이 잘못되었는데 눈에 띄는 것만 말씀드리죠.
1. 각각의 방법이 끝난 후에서는 fp가 EOF에 있으므로 다시 되돌려야 합니다.
fseek(fp, 0, SEEK_SET);
2. 마지막 방법 #5는 이렇게 하세요. (C FAQ Q12.2)
3. get_line()에도 버그가 있습니다.
* C FAQ Q12.1
* 맨 처음에 읽은 글자가 EOF이면 0을 반환하게 되는군요.
답변을 달아주셔서 감사합니다^^[quote]상당히 많은 부분이 잘
답변을 달아주셔서 감사합니다^^
제가 위의 프로그램을 실행할때
다른 방법들은 주석처리를 하고 한 방법만 테스트 하였습니다.
그것을 그냥 설명없이 한꺼번에 코드를 올려서 오해를 하신것 같습니다.
제가 설명을 잘했어야 하는데.. ^^;;
제 코드에서 변수 c는 int로 선언되어 있습니다..^^;;
님의 말대로 버그가 있었습니다....
감사합니다..
제가 가장 이해할수가 없는것은 저 위의 방법을 차례차례
한 방법씩 실행을 해보았는데..
한번도,,
파일에서 값을 읽어와 저장되거나.
파일에서 값을 읽어와 터미널어 출력되지 않는다는 것입니다.
제 생각에는 문법적으로 문제가 없는것 같은데..
왜 한 방법도 제대로 실행되지 않는지..
제가 뭔가 기본적으로 크게 잘못한 부분이 있는 건가요??
제발.. please...
저에게 도움을 주셨으면 합니다..
답변달아준 모든 분들 행복하세요^^
감사합니다.
당근
[quote="gusdo2000"]제가 뭔가 기본적으로 크게 잘못한 부분
크게 잘못하신 건 아닌 것 같습니다만:), 여튼 문제의 원인을 앞의 세 분이 이미 알려주신 것 같은데요. 혹시나 싶어서 직접 타이핑 해서 실행해 봤으나 (file => terminal 방법 1만 해보긴 했지만;; ) 잘 됩니다. (물론 앞의 분들 말씀 대로 file1.txt를 열 때 "w+" 대신 "r"를 사용하도록 바꿨습니다.)
$PWD `date`
파일입출력은 어지간하면 write나 mmap로 사용하심이 어떠신지?
파일입출력은 어지간하면 write나 mmap로 사용하심이 어떠신지?
공부중이라면야 상관은 없지만서도....
[quote="gusdo2000"]제 코드에서 변수 c는 int로 선언되
저는 이곳을 얘기한 것입니다.
해결했습니다!!저의 잘못은.. 파일에 쓴 후 파일 포인터의
해결했습니다!!
저의 잘못은..
파일에 쓴 후 파일 포인터의 위치를 다시 처음으로 돌리지 않아서 아무것도 읽지 않은 것이었습니다!
답변 달아주셔서 정말 감사합니다!!
당근
댓글 달기