Borland C++ Builder VCL FAQ - Как узнать размер папки?

ОГЛАВЛЕНИЕ


Как узнать размер папки?

Для получения размера папки со всеми ее подпапками можно воспользоваться следующей функцией:
void FolderSize(AnsiString Folder,int &Size,int &fCount,int &folCount) 
  {
//Функция записывает в параметры Size - размер папки в байтах
//fCount - общее количество файлов в папке
//folCount - общее количество подпапок в папке

  TSearchRec SR;
//Проверяем, заканчивается ли путь к папке на \, если да, то удаляем его,
  if(Folder[Folder.Length()] == '\\')
     Folder.SetLength(Folder.Length()-1);
  if(FindFirst(Folder+"\\*.*",faAnyFile,SR) == 0)//Делаем первый поиск
   do
      {  //Если то что мы нашли не является обратными ссылками...
         if(SR.Name != "." &&  SR.Name != "..")
         {  //Если то что мы нашли является папкой, функция вызывает саму себя
//и увеличивает счетчик кол-ва подпапок
            if((SR.Attr & faDirectory)!=0)
               {
                  FolderSize(Folder+"\\"+SR.Name,Size,fCount,folCount);
                  folCount++;
               }
            else //Если это файл - прибавляем его размер к общему размеру
               {
                  Size = Size + SR.Size;
                  fCount++;
               }
         }
      }
   while(FindNext(SR)==0);
    FindClose(SR);
  }