Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / рекурсивный поиск / 10 сообщений из 10, страница 1 из 1
18.06.2018, 10:26
    #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
18.06.2018, 10:35
    #39661850
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсивный поиск
Передать искомое в параметр mask?
см 2 последние строки кода
...
Рейтинг: 0 / 0
18.06.2018, 10:41
    #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
18.06.2018, 11:01
    #39661866
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсивный поиск
fraks,
спасибо!
...
Рейтинг: 0 / 0
18.06.2018, 16:28
    #39662073
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсивный поиск
Kast2KПередать искомое в параметр mask?Нет. Тогда каталоги перестанут искаться
...
Рейтинг: 0 / 0
18.06.2018, 17:27
    #39662096
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рекурсивный поиск
_Vasilisk_Kast2KПередать искомое в параметр mask?Нет. Тогда каталоги перестанут искаться
ТС вопрошал про файлы автор искал в папках и подпапках файл с конкретным именем , например, 'Дельфи 7'?

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


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