FILE* fp;
_int64 liPrev;
char szReadBuf[513];
fp = fopen("test.txt", "rtS");
do {
iRet = fgets(szReadBuf, 512, fp);
if(szReadBuf[0] != '0') {
_lseeki64(fileno(fp), liPrev, SEEK_SET); //(1)
break;
}
}while(!_eof(fileno(fp)));
fclose(fp);昨日「くじけずがんばる」みたいなことを書いたのは忘れてください。行を読み込んだ後、戻らなくてはならない必要性が発生したのでくじけました。で、Cランタイムを使って書き直し。「一行読み込んで先頭が'0'でなければ一行分戻る」というコードを書いたのですが、これが戻らない。
おおざっぱにかくと上のようなソース。ここでは省略しているけれど、liPrevには先頭位置からの読み込みバイト数が入っているとします。
(1)の前にfclose()/fopen()すれば問題なくいくことはわかっているのですが、あ…低水準とまぜちゃだめなんだっけか。fseek()は64bitサイズサポートしていないんだよな…と思ったら、VS2005のCRTにはfseeki64()があるのかorz(使っているのはVS2003)。