怎样用比较简洁的方法取得一个目录的大小(包括其所有子目录和文件)?最好运行速度别太慢。
unsigned __int64 __fastcall GetFolderSize(AnsiString Folder, bool Recurse = true)
{
TSearchRec sr;
unsigned __int64 Result = 0;
Folder = IncludeTrailingBackslash(Folder);
if( FindFirst(Folder + "*.*", faAnyFile, sr) == 0 )
{
do
{
if( sr.Name == "." || sr.Name == ".." )
continue;
if( sr.Attr & faDirectory )
{
if( Recurse )
Result += GetFolderSize(Folder + sr.Name, true);
}
else
{
ULARGE_INTEGER ul;
ul.LowPart = sr.FindData.nFileSizeLow;
ul.HighPart = sr.FindData.nFileSizeHigh;
Result += (unsigned __int64)ul.QuadPart;
}
}
while( FindNext(sr) == 0 );
FindClose(sr);
}
return Result;
}
使用例子
unsigned __int64 size = GetFolderSize("C:\\");//默认搜索子目录