Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2008, 18:48   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию Нужно найти папку быстро но как?

И так я знаю токо имя файла
Мне надо....

Найти где расположен этот файл а именно путь к нему
Иначе если он не нашол (путь к файлу) то exit
zotox вне форума Ответить с цитированием
Старый 20.09.2008, 20:22   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Код:
function ScanDir(StartDir: string; FileName: string): string;
var  SearchRec : TSearchRec;
begin
  if StartDir[Length(StartDir)] <> '\' then
     StartDir := StartDir + '\';

  if FindFirst(StartDir+FileName, faAnyFile, SearchRec) = 0 then
  begin
    FindClose(SearchRec);
    result := StartDir;
    exit;
  end;

  if FindFirst(StartDir+'*', faAnyFile, SearchRec) = 0 then
  repeat
    if (SearchRec.Attr and faDirectory) = faDirectory then
    if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
    result := ScanDir(StartDir + SearchRec.Name, FileName);
  until (FindNext(SearchRec) <> 0) or (result <> '');
  FindClose(SearchRec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := ScanDir('c:', '_log.txt');
  showmessage(s);
end;
Для одного диска. Если надо поиск по всем дискам, делаем цикл for i := 'A' to 'Z'
eoln вне форума Ответить с цитированием
Старый 21.09.2008, 12:26   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

zotox, только учтите, что это будет:
1) очень не быстро ;-(
2) может найтись путь не обязательно к тому файлу, который Вам нужен - поищите, через стандартный поиск, например, файлик readme.txt - гарантирую, что на диске C: он будет не один ;-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2008, 13:35   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Ну если надо все файлы с заданным именем, то заменяем
Код:
if FindFirst(StartDir+FileName, faAnyFile, SearchRec) = 0 then
  begin
    FindClose(SearchRec);
    result := StartDir;
    exit;
  end;
на
Код:
if FindFirst(StartDir+FileName, faAnyFile, SearchRec) = 0 then
  repeat
    if (SearchRec.Attr and faDirectory) <> faDirectory then
    memo1.lines.add(StartDir)
  until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
На счёт времени. Если искать файл с уникальным именем, который по данному алгоритму будет найден самым последним после перебора 180 000 файлов и почти 12 000 папкок, то у меня время было 13 секунд.

Последний раз редактировалось eoln; 21.09.2008 в 13:39.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно программно найти окно программы и нажать на нем кнопку SeRыЙ Win Api 23 09.03.2010 08:00
Запрос - нужно найти по каждому ид максимальное сальдо, и просуммировать их za4ot SQL, базы данных 6 19.09.2008 15:09
теория игр.нужно найти наилуяший результат при наихудших событиях naked Microsoft Office Excel 2 07.05.2008 11:33
Срочно!!! Нужно найти программу - разговорник!!! PAVEL315 Свободное общение 1 05.05.2007 21:31