Как заставить FindFirst искать файлы в текущем каталоге?
У меня проблемы с написанием кода для процедуры, которая откроет папку каталога и рекурсивно удалит все файлы в ней, чтобы я, в свою очередь, мог удалить саму папку. У меня не будет проблем с рекурсивной процедурой, но я не могу заставить функции FindFirst/FindNext/FindClose работать должным образом. Приведенная ниже процедура должна искать в текущем каталоге любые файлы любого типа (однако я могу неправильно использовать подстановочные знаки для строк; я не нашел в Интернете много о синтаксисе их использования).
procedure TForm1.Button1Click(Sender: TObject);
var SR: TSearchRec;
begin
ShowMessage(GetCurrentDir);
if (FindFirst('\*.*',faAnyFile,SR)=0) then
begin
repeat
ShowMessage(SR.Name);
until FindNext(SR)<>0;
FindClose(SR);
end
else begin
ShowMessage('No matching files found');
end;
end;
Сейчас кажется, что независимо от того, что я вставил в имя файла, процедура никогда не находит никаких файлов и всегда возвращает сообщение "Не найдено ни одного подходящего файла".
1 ответ
Путь '\*.*'
относительно корневого каталога на диске текущего рабочего каталога. Вы, вероятно, хотите пройти GetCurrentDir + '\*'
в FindFirst
, Или даже лучше, TPath.Combine(GetCurrentDir, '*')
,
Например, эта программа демонстрирует, что ваш код работает правильно при условии, что вы передаете соответствующий путь к FindFirst
,
program FindFirstDemo;
{$APPTYPE CONSOLE}
uses
SysUtils, IOUtils;
var
SR: TSearchRec;
begin
Writeln(GetCurrentDir);
if FindFirst(TPath.Combine(GetCurrentDir, '*'),faAnyFile,SR)=0 then
begin
repeat
Writeln(SR.Name);
until FindNext(SR)<>0;
FindClose(SR);
end;
Readln;
end.