fc2ブログ

CFileFind::GetLength64()のバグ(MFC6)

GetFilePath()の不具合など、そこらじゅうに公開されてます、でもこの不具合を公開している日本人は・・・

http://www.codeproject.com/buglist/getlength64bug.asp.asp
<ソース抜粋>
struct {
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
} WIN32_FIND_DATAx data;
INT64 GetLength64()
{
return dara.nFileSizeHigh + (data.nFileSizeHigh << 32);
}
判る人には判る、とてつもない不具合(MFC6)
せめて、dara.nFileSizeHigh + (data.nFileSizeHigh * 0x100000000) とすれば大丈夫だった(?)
MFC7以降は、GetLength64()はINT64 GetLength()に統合されてます(バグもない?)。
ちなみに、CFile::GetStatus()も4G以上をアクセスするとアサート(デバッグ環境)。
Posted by CabinUltraMild URL

コメントの投稿

非公開コメント

32bitだから

nFileSizeLow、nFileSizeHighは32bitだから64bit(4GB越え)の
ファイルサイズは取得できませんよと言う事ですよね。
(((INT64)data.nFileSizeHigh) << 32) + nFileSizeLow;
な感じにしろと。
さらに言うならINT64は符号付整数なのでULONGLONGの方が良いのではないかと個人的には思う次第。

なお、うちのソフトは全部そうなってます。

いやだからその

return dara.nFileSizeHigh + .. って(絶句
いやまぁ、単なるミスプリってのはわかったけど(笑
ネタがネタだけにここまで間違ってるのか?とか一瞬おもたよ。

月別アーカイブ
カテゴリー
リンク
ブログ内検索
RSSフィード