2GB を超えるファイルに対するシークは厄介なままでした.

ずいぶん前に,2GB を超えるファイルに対してシークをおこなうとき,fseek() の第二引数 offset が long(32bit)なおかげで苦労した記憶があります.

久しぶりに同じようなことをすることになり,何か良い方法はないものかと探してみたのですが,以前と状況はあまり変わっていないようです.

基本的には,fseeko64(), ftello64() を使ってみたり,あるいは _fseeki64(), _ftelli64() を使ってみたりすることになると思います.

ただし,環境によって関数,型,マクロと幅広く変化してしまうので,どうしても微妙な感じがします.

  • MinGW
    • fopen(), fseeko64(), ftello64() が使えました.
  • VC++
    • _fseeki64(), _ftelli64() という関数があります.