HTTqp
|
Дата: Понедельник, 02.03.2015, 00:49 | Сообщение # 1
|
Частый гость
Зарегистрирован: 08.10.2014
Группа: Пользователи
Сообщений: 57
Статус: Offline
|
помогите добавить поиск в подкатологах, написал код по всем дискам, но он ищет только в первой папке вот мой код:
Код
procedure LoadFile;
var
FData: WIN32_Find_Data;
HFile: THandle;
i: Char;
begin
for i:= 'A' to 'Z' do begin
if (GetDriveType(PChar(i+':\'))<>0) and (GetDriveType(PChar(i+':\'))<>1) then
begin
HFile:=FindFirstFile(PChar(i+':\'+'*.*'),FData);//Ищем файлы только в указанном каталоге
if HFile<>INVALID_HANDLE_VALUE then //Проверяем отсутствие ошибок
begin
repeat
if (FData.dwFileAttributes and faDirectory)<>faDirectory then//Проверка что это не папка
Form1.Memo1.Lines.Add(FData.cFileName);
until FindNextFile(HFile,FData)<>True;
Windows.FindClose(HFile);
end;
end;
end;
end;
Только пожалуйста есть будут примеры нужно как можно меньше переменных. И обойтись WIN32_Find_Data.
И еще как сделать поиск несколько расширейний, я так понял в виде массива, но не знаю как правильно реализовать
Сообщение отредактировал HTTqp - Понедельник, 02.03.2015, 00:51
|
|
|
|
d4rkzy
|
Дата: Понедельник, 02.03.2015, 08:47 | Сообщение # 2
|
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
|
Цитата HTTqp ( )
И обойтись WIN32_Find_Data.
Зажми ALT и тыкни по переменной WIN32_FIND_DATA - тебе нужно урвать этот класс в себе в юнит.
|
|
|
|
HTTqp
|
Дата: Понедельник, 02.03.2015, 09:13 | Сообщение # 3
|
Частый гость
Зарегистрирован: 08.10.2014
Группа: Пользователи
Сообщений: 57
Статус: Offline
|
Цитата d4rkzy ( )
Зажми ALT и тыкни по переменной WIN32_FIND_DATA - тебе нужно урвать этот класс в себе в юнит.
не понял к чему это? этот клас есть в unit wundows. По моему ты что то не то сказал)
|
|
|
|
dolphin
|
Дата: Понедельник, 02.03.2015, 12:17 | Сообщение # 4
|
Администратор
Сообщений: 902
Статус: Offline
|
Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
|
|
|
|
ramzeswr
|
Дата: Понедельник, 02.03.2015, 12:26 | Сообщение # 5
|
Участник
Зарегистрирован: 17.04.2013
Группа: Пользователи
Сообщений: 61
Статус: Offline
|
Вот набросал пример
Код
program Project2;
uses
windows;
function GetExtension(s: string): string;
var
i: integer;
begin
result:='';
for i:=Length(s) downto 0 do
if s[i] = '.' then
begin
result:=copy(s, i, Length(s));
exit;
end;
end;
function FindFile(path, ext: string): boolean;
var
a: Cardinal;
fa: _WIN32_FIND_DATAA;
begin
a:=FindFirstFile(PansiChar(path+PChar('\*.*')),fa);
SetConsoleTitle(PChar(path));
while FindNextFile(a,fa) do
begin
if ((fa.cFileName<> '..') and (fa.cFileName<> PChar('.'))) then
begin
if fa.dwFileAttributes = $00000010 then FindFile(path+'\'+fa.cFileName, ext)
else if pos(CharLower(PansiChar(GetExtension(fa.cFileName)+#0)), CharLower(PansiChar(ext+#0)))<>0
then writeln(path+'\'+fa.cFileName);
end;
end;
FindClose(a);
end;
var
C: char;
begin
AllocConsole();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
for C:= 'A' to 'Z' do
FindFile(C+':', '.res.txt');
readln;
end.
Рекурсивно ищет по всем дискам файлы с расширениями .res и .txt
Сообщение отредактировал ramzeswr - Понедельник, 02.03.2015, 12:44
|
|
|
|
ramzeswr
|
Дата: Пятница, 06.03.2015, 12:11 | Сообщение # 6
|
Участник
Зарегистрирован: 17.04.2013
Группа: Пользователи
Сообщений: 61
Статус: Offline
|
Код
procedure LoadFile(path: String);
var
FData: WIN32_Find_Data;
HFile: THandle;
begin
HFile:=FindFirstFile(PChar(path+'\'+'*.*'),FData);
if HFile<>INVALID_HANDLE_VALUE then
begin
while FindNextFile(HFile,FDATA) do
begin
if ((FDATA.cFileName<> '..') and (FDATA.cFileName<> PChar('.'))) then
begin
if FDATA.dwFileAttributes = $00000010 then LoadFile(path+'\'+FDATA.cFileName)
else if ExtractFileExt(FData.cFileName)='.txt'
then form1.memo1.lines.add(path+'\'+FData.cFileName);
end;
end;
Windows.FindClose(HFile);
end;
end;
Код
LoadFile('c:\users\admin\desktop')
|
|
|
|