16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:2Gを超えるファイルサイズ取得"
この発言は #01355 凛 さんの2Gを超えるファイルサイズ取得 に対するコメントです
nifty:FDELPHI/MES/11/8820 でEpsyさんがテストして下さいまして、
早速問題が露見しました。
演算項が全て4バイトだと演算結果も4バイトで桁あふれするようです。
というわけで、Integerのサイズを超えるファイルサイズを返す関数例改。
function FileSize64(FileName:string):Int64;
var
SR:TSearchRec;
begin
if FindFirst(FileName,faAnyFile,SR)=0 then
begin
result:=SR.FindData.nFileSizeHigh;
result:=result shl 32 + SR.FindData.nFileSizeLow;
FindClose(SR);
end;
end;
もしくは、以下でもいいはず。
function FileSize64(FileName:string):Int64;
var
SR:TSearchRec;
begin
if FindFirst(FileName,faAnyFile,SR)=0 then
begin
result:=SR.FindData.nFileSizeHigh * $100000000 +
SR.FindData.nFileSizeLow;
FindClose(SR);
end;
end;
2001/07/21(Sat) 05:43am MXB01744 凛
- FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/07/21 -
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|