공룡호가 사는 세상 이야기

파일의 내용을 읽어올 때, 해당 파일의 끝을 알아내는 방법은 여러가지가 있다.

while(fscanf(pIF,"%c",&menu) != EOF)

이런 식으로 fscanf의 리턴값을 이용하여 EOF를 검사하면 되는데, while문 안에서 fseek를 이용하여 파일포인터를 조작해야 할 경우에는 순차적으로 읽어나가는 위의 방식이 어울리지 않을 뿐더러 사용할 수도 없다.

그러면 굳이 while문 조건으로 EOF를 검사하지 않고, fseek의 리턴값을 활용하면 된다.

fseek()를 MSDN에서 찾아보면,
If successful, fseek returns 0. Otherwise, it returns a nonzero value. On devices incapable of seeking, the return value is undefined.

if(fseek(pIF, LongOffset, SEEK_CUR))

으로 사용하여 파일의 끝이면 이동할 수가 없으므로 0이 아닌 값을 리턴하므로 if문은 참이된다. 고로...

while(1)
{
.
.
if(fseek(pIF, 20, SEEK_CUR))
break;
}

그럼 while문 내부를 수행하다가 EOF를 만나면 더이상 이동할 수 없으므로, 루프문 종료.
간단하지만. 오늘 한 삽질의 대가로는 충분하다.