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