Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по всему диску [D7, XP]


lobach ©   (2006-10-03 18:52:00) 

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

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:.
Как такое дело организовать???


Ketmar   (2006-10-05 16:41:00) [1]

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


lobach   (2006-10-05 12:29:00) [2]

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


lobach   (2006-10-05 11:54:00) [3]


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

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


lobach   (2006-10-04 12:44:00) [4]


> Dmitrij_K

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


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

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


lobach   (2006-10-04 12:39:00) [6]


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

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


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

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


lobach   (2006-10-04 12:31:00) [8]

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

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);


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

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


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

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


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


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

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


Virgo_Style   (2006-10-03 19:36:00) [12]

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


Virgo_Style   (2006-10-03 19:35:00) [13]

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


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


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

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


lobach   (2006-10-03 19:28:00) [15]


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

Что за Dir???


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

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


lobach   (2006-10-03 19:10:00) [17]

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо