Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Поиск по всему диску   Найти похожие ветки 

 
lobach ©   (2006-10-03 18:52) [0]

здравствуйте мастера, подскажите как сделать поиск по всему локальному диску
У меня такая фишка:

var
f: TextFile;
SearchRec: TSearchRec;
begin
AssignFile(f, "c:/123.txt");
ReWrite(f);
if FindFirst("c:\" + "*.exe", faAnyFile, SearchRec) = 0 then begin
if (SearchRec.Name <> ".") or (SearchRec.Name <> "..") then
Writeln(f, SearchRec.Name);
while (FindNext(SearchRec) = 0) do begin
Writeln(f, SearchRec.Name);
end;
Closefile(f);

end;
end;


эта процедурка пишет в файл 123.txt все exe-шники, но мне надо искать по всему диску c:.
Как такое дело организовать???


 
Virgo_Style ©   (2006-10-03 19:00) [1]

Рекурсией.
 if (Attr and faDirectory) = faDirectory then вызов самой себя с параметром "путь к свеженайденному каталогу"


 
lobach ©   (2006-10-03 19:10) [2]

Это после FindFirst???
Что-то я не понял, а можно примерчик(например на основе моего кода)???


 
saxon   (2006-10-03 19:17) [3]

dir - очень хорошо такое делает.


 
lobach ©   (2006-10-03 19:28) [4]


> dir - очень хорошо такое делает.

Что за Dir???


 
saxon   (2006-10-03 19:35) [5]

например такой:
в командной строке - dir *.exe /b /s > 123.txt
ну если так надо на Делфи, то
запускаешь что то из winexec/shellexecute/createprocess с такой вот командой, потом находишь свой созданнй файл и делаешь все что надо.


 
Virgo_Style ©   (2006-10-03 19:35) [6]

lobach ©   (03.10.06 19:10) [2]
а можно примерчик


все уже написано до нас. как про рекурсию, так и готовых процедур в инете (и на этом форуме) пруд пруди


 
Virgo_Style ©   (2006-10-03 19:36) [7]

saxon   (03.10.06 19:35) [5]
я надеюсь, вы шутите


 
saxon   (2006-10-03 19:41) [8]


> Virgo_Style ©   (03.10.06 19:36) [7]

ну почему же, по скорости я думаю - это будет пошустрее.


 
Virgo_Style ©   (2006-10-03 20:16) [9]

saxon   (03.10.06 19:41) [8]
а мне кажется, ряд "лишних" файловых операций только замедлит работу.


 
Palladin ©   (2006-10-03 20:21) [10]

однофигственно


 
lobach ©   (2006-10-04 12:31) [11]

Вопрос по тому-же поиску:
Нашел такую процедурку:

procedure TForm1.FindFile(Dir:String);
Var SR:TSearchRec;
   FindRes:Integer;
begin
FindRes:=FindFirst(Dir+"*.*",faAnyFile,SR);
While FindRes=0 do
  begin
     if ((SR.Attr and faDirectory)=faDirectory) and
     ((SR.Name=".")or(SR.Name="..")) then
        begin
           FindRes:=FindNext(SR);
           Continue;
        end;

     // если найден каталог, то
     if ((SR.Attr and faDirectory)=faDirectory) then
        begin
           // входим в процедуру поиска с параметрами текущего каталога +
           // каталог, что мы нашли
           FindFile(Dir+SR.Name+"\");
           FindRes:=FindNext(SR);
           // после осмотра вложенного каталога мы продолжаем поиск
           // в этом каталоге
           Continue; // продолжить цикл
        end;

     ListBox1.Items.Add(SR.Name);
     FindRes:=FindNext(SR);
  end;
FindClose(SR);
end;


Всё работает, находит все файлы на диске, но когда меняю расширение файла, на exe например, он искать ничего не хочет. Покопался, вроде всё правильно, подскажите в чём ошибка.
FindRes:=FindFirst(Dir+"*.exe",faAnyFile,SR);


 
Dmitrij_K   (2006-10-04 12:34) [12]

Не находит директории удовлетворяющие условию "*.exe"


 
lobach ©   (2006-10-04 12:39) [13]


> Не находит директории удовлетворяющие условию "*.exe"

И соответственно если не находит директорий, то и ненаходит файлов в них?
А как это дело обойти?


 
Dmitrij_K   (2006-10-04 12:41) [14]

Искать *.*
самому проверять файл на *.exe В Masks.pas есть функция


 
lobach ©   (2006-10-04 12:44) [15]


> Dmitrij_K

Типа если файл подходит под *.exe, то записать его и продолжить.
Если нет просто продолжить.
Типа того??


 
lobach ©   (2006-10-05 11:54) [16]


> Masks.pas есть функция

Что за функция??? Помогите с этой темой.


 
lobach ©   (2006-10-05 12:29) [17]

Скажите хоть как из TSearchRec расширение файла извлеч???


 
Ketmar ©   (2006-10-05 16:41) [18]

>[17] lobach(c) 5-Oct-2006, 12:29
>Скажите хоть как из TSearchRec расширение файла
>извлеч???
руччкий учить. а ещё английский. справку читать. например, по ExtractFileExt().



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.192 c
2-1159945345
pavel_guzhanov
2006-10-04 11:02
2006.10.22
Кто-нибудь пользовался IBBackupService?


2-1156960764
To4kA
2006-08-30 21:59
2006.10.22
Сетевые настройки


15-1159184655
Samael6
2006-09-25 15:44
2006.10.22
Формат данных Word


15-1159892413
Furyz
2006-10-03 20:20
2006.10.22
Кажись баг в Дмклиенте


2-1159783773
pathfinder
2006-10-02 14:09
2006.10.22
IndyFTP(10) + proxy = Socket Error # 10038