![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||