| 
				
				Рекурсивный поиск
				 | 
 | 
| 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 |  
 
 
 
 
 
Администратор 
Сообщений: 906 
Статус: Offline 
 
 | 
  Система: Windows 10 x64, Kali Linux   Среды программирования: Delphi 7, Delphi 10.x 
   Я не профессионал, я всего лишь любитель   Я не вредитель, я всего лишь теоретик
 |  
|   | 
 |    | 
| 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')  
 |  
|   | 
 |    |