![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по всему диску [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 вызов самой себя с параметром "путь к свеженайденному каталогу"