Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2008, 12:32   #1
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию Как найти размер папки!

Вот функция где здесь ошибка
Код:
function tform1.DirSize(Dir: string): int64;
var
  SearchRec: TSearchRec;
  Separator: string;
  DirBytes: integer;
begin
  Result:=-1;
  if Copy(Dir,Length(Dir),1)='\' then
    Separator := ''
  else
    Separator := '\';
  if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then
  begin
    if FileExists(Dir+Separator+SearchRec.name) then
      DirBytes := DirBytes + SearchRec.Size
    else
    if DirectoryExists(Dir+Separator+SearchRec.name) then
    begin
      if (SearchRec.name<>'.') and (SearchRec.name<>'..') then
        DirSize(Dir+Separator+SearchRec.name);
    end;
    while FindNext(SearchRec) = 0 do
    begin
      if FileExists(Dir+Separator+SearchRec.name) then
        DirBytes := DirBytes + SearchRec.Size
      else
      if DirectoryExists(Dir+Separator+SearchRec.name) then
      begin
        if (SearchRec.name<>'.') and (SearchRec.name<>'..') then
          DirSize(Dir+Separator+SearchRec.name);
      end;
    end;
  end;
  FindClose(SearchRec);
  Result:=DirBytes;
end;
Потказывает что пустая папка весит 12323111байт
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 02.02.2008, 13:12   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Может я не заметил, но я не нашел, где вы присваиваете DirBytes начальное, то бишь нулевое значение...
Или вы считаете, что при создании переменная принимает нужное вам значение автоматом? Не-а, она этого не умеет... Там что угодно может быть...
mihali4 вне форума Ответить с цитированием
Старый 02.02.2008, 13:39   #3
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Что не работает Можешь написать Функцию для нахождения размера папки??
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 02.02.2008, 13:45   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А я вот, например, вообще не вижу места, где бы к DirBytes добавлялся размер вложенного каталога. И смысл использования integer в функции int64 от меня ускользает....
B_N вне форума Ответить с цитированием
Старый 02.02.2008, 14:01   #5
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Код:
function tform1.GetDirSize(const aPath: string):int64;
var
  SR: TSearchRec;
  tPath: string;
begin
RESULT:=0;
  tPath := IncludeTrailingBackSlash(aPath);
  if FindFirst(tPath + '*.*', faAnyFile, SR) = 0 then
  begin
    try
      repeat
        if (SR.Name = '.') or (SR.Name = '..') then
          Continue;
        if (SR.Attr and faDirectory) <> 0 then
        begin
          GetDirSize(tPath + SR.Name);
          Continue;
        end;
        result := result +
          sr.Size;
      until FindNext(SR) <> 0;
    finally
      Sysutils.FindClose(SR);
    end;
  end;
end;
воттакая функция счиатет только файлы вложенный но не папки
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 02.02.2008, 14:07   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Ёлки, ну вот тут:
Код:
        begin
          GetDirSize(tPath + SR.Name);
          Continue;
        end;
что должно происходить? К тому же, по exception что-то нужно делать с result'ом, а не возвращать неизвестно что.
B_N вне форума Ответить с цитированием
Старый 02.02.2008, 14:29   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот подправленный вариант:
Код:
var
...
  DirBytes: integer; //объявляем ее как глобальную

implementation

{$R *.dfm}

function DirSize(Dir: string): integer;
var
  SearchRec: TSearchRec;
  Separator: string;
begin
  //Result:=-1;
  if Copy(Dir,Length(Dir),1)='\' then
    Separator := ''
  else
    Separator := '\';
  if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then
  begin
    if FileExists(Dir+Separator+SearchRec.name) then
      DirBytes := DirBytes + SearchRec.Size
    else
    if DirectoryExists(Dir+Separator+SearchRec.name) then
    begin
      if (SearchRec.name<>'.') and (SearchRec.name<>'..') then
        DirSize(Dir+Separator+SearchRec.name);
    end;
    while FindNext(SearchRec) = 0 do
    begin
      if FileExists(Dir+Separator+SearchRec.name) then
        DirBytes := DirBytes + SearchRec.Size
      else
      if DirectoryExists(Dir+Separator+SearchRec.name) then
      begin
        if (SearchRec.name<>'.') and (SearchRec.name<>'..') then
          DirSize(Dir+Separator+SearchRec.name);
      end;
    end;
  end;
  FindClose(SearchRec);
  Result:=Result+DirBytes;
end;

//вызов
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
DirBytes:=0;
DirBytes := DirSize('c:\windows');
Label1.Caption := IntToStr(DirBytes);
end;
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск папки WOLFak Общие вопросы Delphi 9 21.01.2008 14:49
Как найти размер объекта Sibedir Общие вопросы Delphi 12 21.11.2007 06:17
Папки xTANATOSx Общие вопросы Delphi 1 05.11.2007 16:26
Как скопировать папку со всем ее содержимым Arsgun Общие вопросы Delphi 2 09.06.2007 22:07
Отслеживает появление в папке файлов. слежение за определенным файлом в определенной папке. RammFan Win Api 1 09.06.2007 11:09