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)。