powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / рекурсивный поиск
10 сообщений из 10, страница 1 из 1
рекурсивный поиск
    #39661846
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доброго дня!

подскажите плиз, есть процедура рекурсивного поиска файлов по папкам и подпапкам. работает как надо.
а как сделать, чтобы искал в папках и подпапках файл с конкретным именем, например, 'Дельфи 7'?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Procedure TForm1.FindRecursive(Const path: String; Const mask: String);
Var
 fullpath: String;

  Function Recurse( Var path: String; Const mask: String ): Boolean;
    Var
      SRec: TSearchRec;
      retval: Integer;
      oldlen: Integer;
    Begin
      Recurse := True;
      oldlen := Length(path);
      retval := FindFirst(path+mask, faAnyFile, SRec);
      While retval = 0 Do Begin
        Application.ProcessMessages;
        If (SRec.Attr and (faDirectory or faVolumeID)) = 0 Then
         Form1.ListBox1.items.Add(path+srec.name);
         Form1.Caption:='Found '+IntToStr(Form1.ListBox1.items.Count)+' files...';
        retval := FindNext(SRec);
      End;
      FindClose(SRec);

      If not Result Then Exit;

      retval := FindFirst( path+'*.*', faDirectory, SRec);
      While retval = 0 Do Begin
        If (SRec.Attr and faDirectory) <> 0 Then
          If (SRec.Name <> '.') and (SRec.Name <> '..') Then Begin
            path := path + SRec.Name + '\';
            If not Recurse( path, mask ) Then Begin
              Result := False;
              Break;
            End;
            Delete( path, oldlen+1, 255 );
          End;
        retval := FindNext( SRec );
      End;
      FindClose( SRec );
    End;
Begin
 If path = '' Then GetDir(0, fullpath)
              Else fullpath := path;

 If fullpath[Length(fullpath)] <> '\' Then fullpath := fullpath + '\';

 If mask = '' Then  Recurse(fullpath, '*.*')
              Else  Recurse(fullpath, mask);
 end;
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39661850
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передать искомое в параметр mask?
см 2 последние строки кода
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39661856
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsYekaterina,

Например вот тупой но работающий вариант

Заменить

Код: pascal
1.
2.
        If (SRec.Attr and (faDirectory or faVolumeID)) = 0 Then
         Form1.ListBox1.items.Add(path+srec.name);



на

Код: pascal
1.
2.
3.
4.
if (SRec.Attr and (faDirectory or faVolumeID)) = 0 then begin
  if pos('Дельфи 7', srec.name) > 0
    then Form1.ListBox1.items.Add(path+srec.name);
end;
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39661866
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks,
спасибо!
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39662073
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2KПередать искомое в параметр mask?Нет. Тогда каталоги перестанут искаться
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39662096
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Kast2KПередать искомое в параметр mask?Нет. Тогда каталоги перестанут искаться
ТС вопрошал про файлы автор искал в папках и подпапках файл с конкретным именем , например, 'Дельфи 7'?

Поэтому и ответ соответствующий
Код: pascal
1.
FindRecursive('D:\Delphi7','*delphi7*');
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39662108
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2KТС вопрошал про файлы автор искал в папках и подпапках файл с конкретным именем , например, 'Дельфи 7'?Подпапки перестанут находиться
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39662157
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Kast2KТС вопрошал про файлы пропущено...
Подпапки перестанут находиться
Почему перестанут-то, если там поиск подпапок сделан отдельным циклом без маски?
Код: pascal
1.
retval := FindFirst( path+'*.*', faDirectory, SRec);
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39662159
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вообще код, конечно, пьяной лошадью написан, такое ощущение :)
...
Рейтинг: 0 / 0
рекурсивный поиск
    #39662342
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpПочему перестанут-то, если там поиск подпапок сделан отдельным циклом без маски?Извините. Не заметил. Трындец.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / рекурсивный поиск
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]