本文整理自网络,侵删。
function GetFileSizeByFileStream(const FileName:String):int64;
var
FileStream:TFileStream;
begin
Result:=0;
FileStream:=TFileStream.Create(FileName,fmOpenRead,fmShareDenyNone);
try
Result:=FileStream.Size;
finally
FileStream.Free;
end;
end;
function GetFileSizeByAPI(const FileName:String):int64;
var
FileHandle:THandle;
HIFileSize:DWORD;
LOFileSize:DWORD;
begin
Result:=0;
FileHandle:=CreateFile(PChar(FileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
try
LOFileSize:=GetFileSize(FileHandle,@HIFileSize);
Result:=LOFileSize+HIFileSize*4294967296;
finally
CloseHandle(FileHandle);
end;
end;
可以用下面的过程来测试:
procedure TestGetFileSize;
var
FileStream:TFileStream;
Begin
FileStream:=TFileStream.Create('d:\test.mem',fmCreate);
try
FileStream.Size:=16896666398;//大概是15.7GB
finally
FileStream.Free;
end;
ShowMessage('GetFileSizeByFileStream(''d:\test.mem'')='+IntToStr(GetFileSizeByFileStream('d:\test.mem')))
ShowMessage('GetFileSizeByAPI(''d:\test.mem'')='+IntToStr(GetFileSizeByAPI('d:\test.mem')))
End;
相关阅读 >>
Delphi 判断两个时间差是否在一个指定范围内 -withinpastyears、withinpastmonths、withinpastweeks、withinpastdays
Delphi windows 编程[20] - 改变菜单项并换行
Delphi 读取图像文件base64编码加载到image组件显示图片
更多相关阅读请进入《Delphi》频道 >>