我试图使用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)
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |