Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизПоиск по всему диску Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c