delphi 获取超GB大文件大小


本文整理自网络,侵删。

 

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 fastreport 直接列印

Delphi双击tmemo选择光标所在行

Delphi 类型映射及类型转换

Delphi 判断两个时间差是否在一个指定范围内 -withinpastyears、withinpastmonths、withinpastweeks、withinpastdays

Delphi 实现窗体随着鼠标移动

Delphi 16 进制转换为 10进制

Delphi windows 编程[20] - 改变菜单项并换行

Delphi rest请求控件增加请求头时不编码

Delphi 获取网络文件大小

Delphi 读取图像文件base64编码加载到image组件显示图片

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...