![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
помогите осуществить поиск по всем дискам и подкатологам,
пишу так Код:
procedure FindFiles;
var
WFD:WIN32_Find_Data;
HFile:THandle;
DType:Byte;
Drive: Char;
mask: PChar;
begin
mask:='*.txt';
for Drive:='a' to 'z' do
DType:=GetDriveType(PChar(Drive+'\'));
case DType of
DRIVE_FIXED{HARD},DRIVE_REMOVABLE{USB}:
begin
HFile:=FindFirstFile(DType+mask,WFD);//Ищем файлы только в указанном каталоге
if HFile<>INVALID_HANDLE_VALUE then //Проверяем отсутствие ошибок
begin
repeat
if (WFD.dwFileAttributes and faDirectory)<>faDirectory then//Проверка что это не папка
Form1.Memo1.Lines.Add(WFD.cFileName);
until FindNextFile(HFile,WFD)<>True;
Winapi.Windows.FindClose(HFile);
end;
end;
end;
end; |
|
#2
|
|||
|
|||
|
Ну у тебя же есть проверка того, что текущий элемент - не каталог. Соотвественно, в противном случае надо сделать рекурсивный вызов.
Того, тебе надо разбить твою процедуру на 2: 1. Стартовая. Назодит все диски и запускает поиск (2ю процедуру) для корня каждого диска. 2. Собственно, рекурсивная процедура поиска всего и вся от указанного (переданного в параметрах) пути. |
|
#3
|
||||
|
||||
|
Сразу скажу, загонять в мемо все файлы весьма не быстрое решение. Какая цель конечная?
|
|
#4
|
|||
|
|||
|
Это тестовый код и надо же мне определять правильно ли он определяет файлы.
|
|
#5
|
|||
|
|||
|
почему не работает, исправил код вот так:
Код:
procedure LoadFile(path: String);
var
FData: WIN32_Find_Data;
HFile: THandle;
begin
HFile:=FindFirstFile(PChar(path+'*.txt'),FData);//Ищем файлы только в указанном каталоге
if HFile<>INVALID_HANDLE_VALUE then //Проверяем отсутствие ошибок
begin
repeat
if (FData.dwFileAttributes and faDirectory)<>faDirectory then//Проверка что это не папка
Form1.Memo1.Lines.Add(FData.cFileName)
else
LoadFile(path+FData.cFileName+'\');
until FindNextFile(HFile,FData)<>True;
Windows.FindClose(HFile);
end;
end;в Button помещаю вот это Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
LoadFile('d:\');
end; |
|
#6
|
||||
|
||||
|
Вы же сами отсекаете все каталоги таким фильтром:
Код:
HFile:=FindFirstFile(PChar(path+'*.txt'),FData) |
|
#7
|
|||
|
|||
|
Цитата:
Последний раз редактировалось Anton93, 05.03.2015 в 22:50. |
|
#8
|
|||
|
|||
|
А вот так:
Код:
HFile:=FindFirstFile(PChar(path+'\*.*'),FData);
...
if (FData.dwFileAttributes and faDirectory)<>0
then begin if (FData.cFileName <> '.') And (FData.cFileName <> '..') then LoadFile(path + FData.cFileName) end
else
if MatchesMask(FData.cFileName,'*.txt') Then
begin
// Делаем что-то полезное
end
...
|