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;
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.046751976013184 seconds