Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.03.2011, 22:58
Аватар для volod3000
volod3000 volod3000 вне форума
Новичок
 
Регистрация: 25.12.2008
Сообщения: 71
Репутация: 114
По умолчанию Общее количество файлов в папке, включая вложенные

Здравствуйте !

Вот функция , которая ни как не хочет заглядывать во вложенные папки.


Код:
function FileCount(Dir: string): integer;
var
  fs: TSearchRec;
  label n;

begin
  Result := 0;

  n:
  
  if FindFirst(Dir + '\*.exe', faAnyFile, fs) = 0 then

    repeat

         inc(Result);

      if (fs.Attr and faDirectory) = faDirectory then
      begin

         Dir := (Dir+fs.name);

         goto n;

      end;
    until
      FindNext(fs) <> 0;
  FindClose(fs);
end;

Где ошибка ?
Ответить с цитированием
  #2  
Старый 31.03.2011, 00:45
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

познакомься с таким понятием, как рекурсия и будет тебе счастье(да и style программирования улучшишь, без всяких там goto))))
Ответить с цитированием
  #3  
Старый 31.03.2011, 01:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ошибка - а у тебя вложенные папки тоже имеют расширение .exe???
Ответить с цитированием
  #4  
Старый 31.03.2011, 01:28
Аватар для volod3000
volod3000 volod3000 вне форума
Новичок
 
Регистрация: 25.12.2008
Сообщения: 71
Репутация: 114
По умолчанию

Цитата:
Сообщение от Pilot_Red
познакомься с таким понятием, как рекурсия и будет тебе счастье(да и style программирования улучшишь, без всяких там goto))))

Все правильно, но в случае рекурсии Result := 0;
Ответить с цитированием
  #5  
Старый 31.03.2011, 02:05
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от volod3000
Все правильно, но в случае рекурсии Result := 0;
да... в случае локального счетчика, но если объявишь глобальную переменную-счетчик то все будет гут))
Ответить с цитированием
  #6  
Старый 31.03.2011, 10:53
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
function FileCount(Dir: string): integer; forward;
...
function FileCount(Dir: string): integer;
var
  fs: TSearchRec;
begin
  Result := 0;
  if FindFirst(Dir + '\*.exe', faAnyFile, fs) = 0 then repeat
    inc(Result);
  until FindNext(fs) <> 0;
  FindClose(fs);
  if FindFirst(Dir + '\*', faDirectory, fs) = 0 then repeat
    if fs.name[1] <> '.' then begin
      inc(Result,FileCount(Dir+fs.name));
    end;
  until FindNext(fs) <> 0;
  FindClose(fs);
end;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 31.03.2011, 12:56
Аватар для volod3000
volod3000 volod3000 вне форума
Новичок
 
Регистрация: 25.12.2008
Сообщения: 71
Репутация: 114
По умолчанию

DJ PhoeniX Спасибо, получилось.

Только добавил '\'

Код:
inc(Result,FileCount(Dir+ '\'+fs.name));

и объявление

Код:
function FileCount(Dir: string): integer; forward;

ненужно (Это я как понимаю для Delphi ниже 8)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter