Помощь - Поиск - Пользователи - Календарь
Полная версия: Поиск фаила на заданном диске...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Noname
В Тр7.0 есть процедура(или функция) поиска файла в _ЗАДАННОМ_ каталоге. А как быть, если заранее не известно в каком каталоге искать этот файл.
Alex
Меня тоже такой вопрос давно мучает.Мож кто поможет.А???
mj
Чё то я не понял вопроса...
Можно поподробнее?
Alex
Вопрос такой.Пусть мы ищем какие-то файлы на диске
C:,но нам не известно какие на нем находятся папки.Мы не знаем их названия.В паскале нет стандартных процедур нахождения имен папок на каком-либо диске.Там есть только нахождения файлов в заданном каталоге.Как только Паскалевскими средствами(без помощи ассемблера,так как я в нем вообще практически не шарю) находить файлы на всем диске(в различных папках,имен которых ты не знаешь).Вот и весь собственно вопрос во всех подробностях(ну или почти что во всех).
Serg28
См. алгоритмы обхода дерева.
mj
Чё то я не понял, а какже FindFirst и FindNext?
Они как файлы так и папки выдают...

Кстати в TurboVision есть очень интересный пример на эту тему...
Noname
FindFirst и FindNext функции(или процедуры-точно не помню...), которые позволяют искать файлы в ЗАДАННОМ каталоге, т.е. им нужно передать обязательный параметр типа PathStr(строка-путь), содержащий место поиска... Т.е. если нам нужно найти файл где-то на C: (например, "c:linuxetc"), мы задаем параметр "C:", эта процедура будет искать только в корне, т.е. в "c:linuxetc" ничего не найдет, если даже там лежит нужный нам файл....
Alex
А я про это и говорю!!!Или хотя бы где найти про это скажите!!!
Noname
To admin: Что насчет интересного примера в TurboVision?
Noname
To Serg28: Если ты про DOSShell и команду "cd", то у меня ничего не вышло, т.к. все равно (в общем случае) заранее не знаю какие директории на  диске...
mj
Цитата
To admin: Что насчет интересного примера в TurboVision?

Файл OUTDIR.PAS
Vit
Для дельфи это будет выглядеть так:

Procedure ScanDir(Dir:string);
 var SearchRec:TSearchRec;
begin
 if Dir<>'' then if Dir[length(Dir)]<>'' then Dir:=Dir+'';
 if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
   repeat
     if (SearchRec.name='.') or (SearchRec.name='..') then continue;
     if (SearchRec.Attr and faDirectory)<>0 then
       ScanDir(Dir+SearchRec.name)  //we found Directory: "Dir+SearchRec.name"
     else
       Showmessage(Dir+SearchRec.name); //we found File: "Dir+SearchRec.name"
   until FindNext(SearchRec)<>0;
 FindClose(SearchRec);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 ScanDir('c:');
end;


Для паскаля изменения будут незначительные
Noname
To MJ: Где б его еще взять!
Noname
Что, все умерли?
___ALex___
твоя задача решается с использованием рекурсии
если сильно надо, то я поищу и скину её сюда
напиши если надо
а то тебе там на дельфийце что-то давали
а на обычном пасе почти одно и то же
Alex
В уроках на pascal.dax.ru есть пример поиска файла любого через рекурсию в заданном месте(например на диске C:) ну уж чтоб на всех дисках искалось я думаю не сложно сделать.
Noname
Пошли - не помешает. Мона на мыло...
Alex
ЧО послать то не пойму!!!
pascal65536
сто лет на форум не заглядывал, а тут такая дискуссия ;)
посмотрите на моём сайте, в исходниках, аналог команды DIR она сканирует все вложенные каталоги, начиная с текущего, или какой укажешь.
Если переделать, то можно и файл искать, и по имени, и по расширению, и по маске, кому как захочется.  :smile.gif

http://www.pascal.hop.ru/sourses.htm
_Noname_
Вот спасибо доброму человеку!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.