FileSize函数的问题

Xor*_*-el 2 delphi

我试图使用system.filesize函数来获取delphi中的文件大小,它适用于文件<4GB但文件> 4GB失败.所以我实现了我自己的,打开所需的文件作为文件流,并获得完美的streamize.

这是一个片段

   function GiveMeSize(PathtoFile : string): int64;
   var
     stream : TFileStream;
     size : int64;
   begin
     try
       stream := TFileStream.Create(PathtoFile, fmOpenReadWrite or fmShareDenyNone);
       size := stream.size;     
     except
       showmessage('Unable to get FileSize');
     end
     finally    
       stream.free;
   end;
Run Code Online (Sandbox Code Playgroud)

但我上面的函数的问题是它打开文件,在处理大量文件时会产生一些开销.是否有任何功能可以获得文件大小> 4GB的文件而无需先打开文件?我已经尝试了一些在线功能,但他们倾向于报告大于4GB的文件的错误文件大小.

德尔福版:XE5

谢谢.

Dav*_*nan 17

System.FileSize是一个Pascal I/O函数,它对Pascal File变量进行操作.如果要获取path指定的文件大小,那么使用System.FileSize它只是错误的函数.

更有甚者,你很可能不想打开文件只是为了获得它的大小.我得到这样的文件大小:

function FileSize(const FileName: string): Int64;
var
  AttributeData: TWin32FileAttributeData;
begin
  if GetFileAttributesEx(PChar(FileName), GetFileExInfoStandard, @AttributeData) then 
  begin
    Int64Rec(Result).Lo := AttributeData.nFileSizeLow;
    Int64Rec(Result).Hi := AttributeData.nFileSizeHigh;
  end 
  else 
    Result := -1;
end;
Run Code Online (Sandbox Code Playgroud)