【发布时间】:2017-05-30 19:43:36
【问题描述】:
我正在尝试编写一个返回目录大小的函数。我已经编写了以下代码,但它没有返回正确的大小。例如,当我在 {pf} 目录上运行它时,它返回 174 字节,这显然是错误的,因为该目录的大小是数 GB。这是我的代码:
function GetDirSize(DirName: String): Int64;
var
FindRec: TFindRec;
begin
if FindFirst(DirName + '\*', FindRec) then
begin
try
repeat
Result := Result + (Int64(FindRec.SizeHigh) shl 32 + FindRec.SizeLow);
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end
else
begin
Result := -1;
end;
end;
我怀疑FindFirst 函数不包含子目录,这就是我没有得到正确结果的原因。因此,如何返回正确的目录大小,即包括所有子目录中的所有文件,就像在 Windows 资源管理器中选择文件夹上的属性一样?我正在使用FindFirst,因为该函数需要支持超过 2GB 的目录大小。
【问题讨论】: