ペペロン頭脳

ソフトウェアエンジニアのメモ的なアレ。

CStdioFile 64bit対応版

VC++2010で文字列をゴリゴリとダンプするツールを作っていたのだが、ダンプ先のファイルが4GBを超えたあたりから変化しなくなってしまった。
書き出しに使っていたCStdioFileが怪しいと思いソース(filetxt.cpp)を読んでみると、なんと64bit未対応。

インターフェイスは以下のようにさも64bit版ですよ!的な見た目だが、実際には中でLONG_MAXを超えるアドレスは扱えないよう制限が掛けられている。

ULONGLONG Seek(LONGLONG lOff, UINT nFrom);
ULONGLONG GetLength() const;
ULONGLONG GetPosition() const;

制限がかかってるってことは、環境によってはストリーム入出力が32bitしか扱えないってことなんですかね。
VC++2013だとどうなってるんだろ?

CStdioFile64

やっぱりバッファを介するCStdioFileを使いたい場面ってあると思うので64bit対応を試みた。


StdioFile64


元ソース内のfseekを_fseeki64に、ftellを_ftelli64に置き換え、ローカル変数の型を整えたくらい。
いまのところWin7(x86)環境では問題なく動作しています。
コンストラクタは必要に応じてオーバーライドすればよろし。
Gistではヘッダに全部突っ込んでるので、実装を分離するもよろし。