|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как сделать программный поиск файлов?
я изменил код из статьи:https://delphisources.ru/pages/faq/b...es_search.html
Программа должна искать .exe файлы на диске C, но после нажатия кнопки ничего не происходит где я накосячил? Код:
unit Unit3; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls, Vcl.CheckLst; type TForm3 = class(TForm) MainMenu1: TMainMenu; N2: TMenuItem; yf1: TMenuItem; Button1: TButton; CheckListBox1: TCheckListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public procedure FindFile(Dir: string); end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.Button1Click(Sender: TObject); begin CheckListBox1.Clear; // очистка списка файлов findfile('c:\')// поиск файлов с начальными условиями, заданных в Edit1 end; procedure TForm3.FindFile(Dir: string); var SR: TSearchRec; FindRes: Integer; begin FindRes := FindFirst(Dir + '*.exe', faAnyFile, SR); while FindRes = 0 do begin if ((SR.Attr and faDirectory) = faDirectory) and ((SR.Name = '.') or (SR.Name = '..')) then begin FindRes := FindNext(SR); Continue; end; // если найден каталог, то if ((SR.Attr and faDirectory) = faDirectory) then begin // входим в процедуру поиска с параметрами текущего каталога + // каталог, что мы нашли FindFile(Dir + SR.Name + '\'); FindRes := FindNext(SR); // после осмотра вложенного каталога мы продолжаем поиск // в этом каталоге Continue; // продолжить цикл end; CheckListBox1.Items.Add(SR.Name); FindRes := FindNext(SR); end; FindClose(SR); end; end. Последний раз редактировалось coffeine, 07.12.2020 в 00:50. |
#2
|
|||
|
|||
Заметка
Также я запускал код из статьи, после нажатия кнопки ничего не происходило
|
#3
|
||||
|
||||
Посмотрите в режиме отладки по F7, увидите что происходит на каждом участке кода и возможно найдете где косяк.
|
Этот пользователь сказал Спасибо Admin за это полезное сообщение: | ||
coffeine (27.12.2020)
|
#4
|
|||
|
|||
Все просто.
Ты задаешь паттерн поиска '*.exe' Таких файлов и директорий в корне нет. Если ты хочешь искать рекурсивно по директориям, то ты должен искать все файлы. Делай, например, так: Код:
uses Masks; procedure TForm1.Button1Click(Sender: TObject); begin CheckListBox1.Clear; findfile('c:\', '*.exe'); end; procedure TForm1.FindFile(Dir: string; Pattern : String); var SR: TSearchRec; FindRes: Integer; begin FindRes := FindFirst(Dir + '*.*', faAnyFile, SR); while FindRes = 0 do begin if ((SR.Attr and faDirectory) = faDirectory) and ((SR.Name = '.') or (SR.Name = '..')) then begin FindRes := FindNext(SR); Continue; end; // если найден каталог, то if ((SR.Attr and faDirectory) = faDirectory) then begin // входим в процедуру поиска с параметрами текущего каталога + // каталог, что мы нашли FindFile(Dir + SR.Name + '\', Pattern); FindRes := FindNext(SR); // после осмотра вложенного каталога мы продолжаем поиск // в этом каталоге Continue; // продолжить цикл end; If MatchesMask(SR.Name,PAttern) Then CheckListBox1.Items.Add(SR.Name); FindRes := FindNext(SR); end; FindClose(SR); end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
coffeine (27.12.2020)
|