Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Чёкнутая процедура


Автор: microo10 10.2.2013, 21:51
Не с того не с сего моя процедура рекурсивного обхода начала выдавать все файлы,даже не сравнивая маску...пару часов назад все работало,я не чего не менял :(
Процедура:
Код

procedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult,Size: Integer;
  fileResult: string;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
             fileResult:=(StartFolder + Name);
              List.Add(StartFolder + Name);
              Size_file:=size_file+GetFileSize(fileResult);
              Application.ProcessMessages();
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
    end;


Процедура вызова:
Код

procedure getInfo(strok:WideString);
var
direct,mack,kindi:string; kind,dd:boolean;
begin
direct:=copy(Strok,1,pos('|',Strok)-1); //директория->строка[i]
Delete(Strok,1,pos('|',Strok));
mack:=copy(Strok,1,pos('|',Strok)-1);
Delete(Strok,1,pos('|',Strok));
Kindi:=copy(Strok,1,pos('|',Strok)-1);
if kindi=('1') then
kind:=true else
kind:=false;
Showmessage(kindi);
FindFiles(direct, mack, Form1.LB1.items, kind);//ищем файлы
end;


Сам вызов:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:= 0 to lb2.Items.Count-1 do // берем пути из lb2 и суем в процедуру парсинга :)
begin
getInfo(lb2.items[i]);
end;


Путь в lb2 выглядит следующим образом директория|маскаимени.маскарасширения|1 или 0|
Exmp:

C:\java|*.exe|1|


Помогите пожалуйста,я уже несколько часов ковыряюсь,а найти проблему не могу  smile 

Автор: DarkProg 10.2.2013, 21:57
Покажите место в процедуре, которое использует маску для фильтрации поиска?


Цитата(microo10 @  10.2.2013,  21:51 Найти цитируемый пост)
пару часов назад все работало,я не чего не менял :(

Видимо это происки скайнет )

Автор: Данкинг 10.2.2013, 22:00
Наверное, надо разобраться, что там в переменной "mack" содержится.

Автор: microo10 10.2.2013, 22:05
Цитата(DarkProg @ 10.2.2013,  21:57)
Покажите место в процедуре, которое использует маску для фильтрации поиска?


Цитата(microo10 @  10.2.2013,  21:51 Найти цитируемый пост)
пару часов назад все работало,я не чего не менял :(

Видимо это происки скайнет )


Код

if MatchesMask(Name, Mask) then
             fileResult:=(StartFolder + Name);
              List.Add(StartFolder + Name);
              Size_file:=size_file+GetFileSize(fileResult);
              Application.ProcessMessages();
          end;



Тут по идее должна быть

Добавлено @ 22:07
Цитата(Данкинг @ 10.2.2013,  22:00)
Наверное, надо разобраться, что там в переменной "mack" содержится.

Даже не заметил что не так написал  smile ... не суть, в mack парсится *.exe

Автор: microo10 10.2.2013, 22:23
 Откуда у меня в процедуре взялось *.* !? smile 
DarkProg, был прав,это 100%  происки скайнет  smile 

Help ! Процедура теперь не может делать отбор по маске когда ScanSubFolders = 0  smile 

Автор: microo10 10.2.2013, 23:06
Нашел проблему самостоятельно...
Проблема была не в маске,а в:

Код

fileResult:=(StartFolder + Name);


Нельзя указывать переменную fileResult...не понял правда почему,но при исправлении на fResult все ок.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)