파일입출력에서..중간라인삭제.
글쓴이: ttarot / 작성시간: 월, 2007/11/05 - 12:45오전
파일에... 이런식으로 저장되있다고 할때..
aaa A+
bbb B+
ccc C+
bbb 를 입력 받으면 그 라인을 제거.
aaa A+
ccc C+
로 파일내용을 바꾸는 겁니다.. 아래 코드가 짠거구요.
돌아가긴 하는데.....
맨아래 ccc 를 입력 받아서 제거하면
aaa A+
bbb B+
로 정상적으로 남는데.. 만약 bbb나 aaa를 입력받으면
(aaa라고 하면..)
bbb B+
ccc C+
ccc C+
이런식으로 하나 더 붙어서 나오는데 왜그런걸까요.
void three(){ FILE *fd,*fd1; char name[80]; char line[80]; char temp[1024]; fd=fopen("temp","rb"); scanf("%s",&name); fflush(stdin); while(!feof(fd)){ fgets(line,80,fd); if(strstr(line,name)==NULL){ strcat(temp,line); } } fclose(fd); fd=fopen("temp","wb"); fprintf(fd,"%s",temp); fclose(fd); printf("삭제되었습니다.\n"); }
Forums:
...
fileno() : FILE * 에서 fd를 추출( FILE * 타입에서 때때로, int형의 file descriptor를 추출할때 사용됨)
ftell() : 파일의 크기 리턴(예를들어 최종적으로 출력한 파일의 위치 리턴)
ftruncate() : 파일의 길이 제한(예를들어, 300바이트 길이를 200바이트로 자르기, 뒷부분은 제거함)
이 세 개의 함수를 적절히 하여, 예를 들어 300바이트 였던 파일을 200바이트로 바꾸는 방법을 고민해 보세요. 그리고, 응용해보세요.
while() {} 하기 전에
while() {} 하기 전에
temp[0] = 0;
fgets() 하기 전에
memset(&line[0], 0, sizeof(0);
OTL
댓글 달기