2014년 10월 27일 월요일

fopen, fseek 이용시 주의사항.

FILE *fp;
fp = fopen("test.txt", "w");

보통 이런식으로 쓰는데, 두번째 인자로 들어가는 값들에는 여러가지가 있다.(MSDN 참고).

이중 "a"가 있는데, append의 약자로, 뒤에서부터 계속 이어서 쓴다는 거다. 즉, 확장해서 계속 쓴다는 것인데....

fopen("test.txt", "a");
이렇게 열어놓고, fseek로 파일포인터를 움직인 후, 파일을 쓰면(fprintf, fputc....등등) fseek로 움직여진 파일포인터에 데이터가 들어가는 것이 아니라, 맨 뒤에서 부터 이어서 쓰게 된다. 이 내용은 MSDN에 나와있는데, 영어 능력이 병신이라 한참 해매다가 찾았다.ㅠㅠ

그래서 맨 뒤에서 앞으로 몇바이트 만큼 파일포인터를 옮기고 싶을 땐, 아래와 같이 하면 된다.

fopen("test.txt", "r+");

r+ : Open a file for update both reading and writing. The file must exist.

즉 존재하는 파일을 여는거다. 파일포인터는 맨 앞에 위치하므로, fseek를 통해서, 맨뒤에서 뒤로 오면 된다.

fseek(fp, -10L, SEEK_END);

이런식....

댓글 없음: