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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.03.2011, 06:18
Аватар для Xalexo
Xalexo Xalexo вне форума
Прохожий
 
Регистрация: 04.02.2010
Адрес: Вселенная,Млечный путь,3 планета от Солнца и т.д.
Сообщения: 40
Версия Delphi: Delphi XE3-5
Репутация: 10
Лампочка поиск файла & папки по критериям

Почти дописал небольшую фоновую утилитку сканирования файлов по выбранным маскам для некоторых последующих действий. В конце-концов решил додумать список исключений для опред. файлов и папок. Сама задача проблем не составила, но вот как дать понять следующей фукнции, что я хочу проигнорировать в заданном каталоге содержащиеся в ней файлы, но при этом продолжить обработку ее поддиректорий ? Пробовал решать задачу по разному... Несовсем понятно, как себя ведет рекурс. ссылка scanproj(prdr+src.name+'\',workfs,ldr); в найденном подкаталоге. Продолжается ли работа функции после выхода и нового цикла сразу же после точки останова ? Логически, вроде бы представляется, что - да... (**) помечены мои безуспешные модификации Может есть у кого рабочая версия подобной или похожей функции...
Код:
procedure scanproj(prdr : string; workfs : boolean = false; ldr : string = ''); {ls: tstringlist}
label 1;
var SRC : TSearchrec;
    ff,lv,lc,ids : integer; brk:boolean;
begin
prdr:= includetrailingbackslash(prdr);
  with nfor_main do
  if directoryexists(prdr) then begin
     brk:= false;
     lv:= 0;
     lc:= 0;
     ff:= 0;
     try
       if findfirst(PrDr+'*.*',faAnyFile,SRC) = 0 then
          repeat
            inc(LC);
            if (SRC.Name <> '.') and (src.Name <> '..') then

               if     ((SRC.Attr and faDirectory) <> 0) then
               begin
                  (**)
                  if not workfs then
                  begin
                  ldr:= prdr+src.name;
                 {проверка на вхождение в список исключ.}                  
                 workfs:= (ltm.indexof('+'+ldr+'\')<>-1);
                  end;
                  (**)

                  scanproj(prdr+src.name+'\',workfs,ldr); inc(lv); //end else brk:= true;
               end
               else
               if not ((SRC.Attr and faVolumeID) <> 0) then
               begin
               (**)               
               if workfs then inc(ff) else
               if ltm.indexof('+'+prdr+src.name)=-1 then
               if HaveBadExt(SRC.Name)then
                      begin
                       case cl.itemindex of
                       0: deletefilewithundo(prdr+src.name,true);
                       1: deletefilewithundo(prdr+src.name,false);
                       2:
                       if not directoryexists(moved.text) then begin tr2.enabled := false; goto 1 end else
                       if copyfile(pchar(prdr+src.name),pchar(includetrailingbackslash(moved.text)+src.name),false) then
                          deletefilewithundo(prdr+src.name);
                       end;
                  end;
             end;
                        {здесь должно бы проверяться условие на соотвествие номера последнего обработанного файла отдельной функции возвращающей все найденные в папке ldr файлы (т.е.-количество)} 
                        (**) workfs := not(ff=foundfiles_count(extractfilepath(ldr)+'*',faanyfile));
                        if not workfs then begin ff:=0; ldr:='' end;
           {
            1:
            if not tr2.enabled then begin showmessage('!process stopped'); proc.caption:= '- остановлено.. ) alt + shift + f12 для отмены из вне('; break; end;
            if (LC mod 10) = 0 then
            begin
               application.ProcessMessages;
            end;
           }
           until findnext(SRC) <> 0;

     finally
       FindClose(SRC);
     end;
  end;
end;
Спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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