C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Алгоритм поиска  (Прочитано 1020 раз)
DennisRitchie
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 1


Алгоритм поиска
« : 10 Июнь 2013, 20:09:13 »

Код
//---------------------------------------------------------------------------
void __fastcall TForm1::PoiskClick(TObject *Sender)
{
   AnsiString disk = Edit1->Text;          
   Log->Clear();
   TSearchRec sear;                    
       if ( ! FindFirst( disk + ExtractFileName(Edit2->Text) + "*.*",faAnyFile, sear ) ) {    
           do {
               Log->Lines->Add("Поиск: " + disk + sear.Name);
           } while ( ! FindNext( sear ) );
       }
       FindClose( sear );    
   }
//---------------------------------------------------------------------------

Имееться алгоритм поиска, но он ищет только в одной папке, не подскажите как его усовершенствовать, тобиш добавить рекурсию ?
« Последнее редактирование: 03 Июнь 2017, 07:49:46 от volvo877 » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #1 : 12 Июнь 2013, 07:54:36 »

Код
#include 
 
void __fastcall SearchFiles(const AnsiString ADir, const AnsiString Mask, const int iAttrs=-1, bool Recurse=true)
{
   const AnsiString dir = IncludeTrailingBackslash(ADir);          
   int nAttrs = 0;
   nAttrs |= (iAttrs0)?
(faReadOnly|faHidden|faSysFile|faVolumeID|faArchive|faAnyFile|faDirectory) :
iAttrs;
 
   TSearchRec sr;                    
 
   if (FindFirst(dir + "*.*", nAttrs, sr)) {
      FindClose(sr);
      return;
   }
 
   do {
         if ((sr.Attr & faDirectory) != faDirectory)
            if (MatchesMask(sr.Name, Mask)) Log->Lines->Add("Поиск: " + dir + sr.Name);
         else
            if(Recurse) SearchFiles(dir + sr.Name, Mask, iAttrs);
   } while (!FindNext(sr));
   FindClose(sr);                
}
 
void __fastcall TForm1::PoiskClick(TObject *Sender)
{
   SearchFiles(Edit1->Text, "*" + ExtractFileName(Edit2->Text) + "*.*"/*, -1, true*/);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.246 секунд. Запросов: 21.