kkamegawa's weblog

Visual Studio,TFS,ALM関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

_lseeki64で戻らない

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