Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Поиск фаила на заданном диске...

Автор: Noname 26.12.2002 16:52

В Тр7.0 есть процедура(или функция) поиска файла в _ЗАДАННОМ_ каталоге. А как быть, если заранее не известно в каком каталоге искать этот файл.

Автор: Alex 26.12.2002 18:09

Меня тоже такой вопрос давно мучает.Мож кто поможет.А???

Автор: mj 27.12.2002 8:57

Чё то я не понял вопроса...
Можно поподробнее?

Автор: Alex 27.12.2002 13:12

Вопрос такой.Пусть мы ищем какие-то файлы на диске
C:,но нам не известно какие на нем находятся папки.Мы не знаем их названия.В паскале нет стандартных процедур нахождения имен папок на каком-либо диске.Там есть только нахождения файлов в заданном каталоге.Как только Паскалевскими средствами(без помощи ассемблера,так как я в нем вообще практически не шарю) находить файлы на всем диске(в различных папках,имен которых ты не знаешь).Вот и весь собственно вопрос во всех подробностях(ну или почти что во всех).

Автор: Serg28 27.12.2002 18:34

См. алгоритмы обхода дерева.

Автор: mj 27.12.2002 19:13

Чё то я не понял, а какже FindFirst и FindNext?
Они как файлы так и папки выдают...

Кстати в TurboVision есть очень интересный пример на эту тему...

Автор: Noname 28.12.2002 15:55

FindFirst и FindNext функции(или процедуры-точно не помню...), которые позволяют искать файлы в ЗАДАННОМ каталоге, т.е. им нужно передать обязательный параметр типа PathStr(строка-путь), содержащий место поиска... Т.е. если нам нужно найти файл где-то на C: (например, "c:linuxetc"), мы задаем параметр "C:", эта процедура будет искать только в корне, т.е. в "c:linuxetc" ничего не найдет, если даже там лежит нужный нам файл....

Автор: Alex 28.12.2002 22:13

А я про это и говорю!!!Или хотя бы где найти про это скажите!!!

Автор: Noname 30.12.2002 13:30

To admin: Что насчет интересного примера в TurboVision?

Автор: Noname 30.12.2002 13:33

To Serg28: Если ты про DOSShell и команду "cd", то у меня ничего не вышло, т.к. все равно (в общем случае) заранее не знаю какие директории на  диске...

Автор: mj 30.12.2002 16:16

Цитата
To admin: Что насчет интересного примера в TurboVision?

Файл OUTDIR.PAS

Автор: Vit 4.01.2003 0:32

Для дельфи это будет выглядеть так:

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 4.01.2003 15:56

To MJ: Где б его еще взять!

Автор: Noname 15.01.2003 12:33

Что, все умерли?

Автор: ___ALex___ 16.01.2003 1:12

твоя задача решается с использованием рекурсии
если сильно надо, то я поищу и скину её сюда
напиши если надо
а то тебе там на дельфийце что-то давали
а на обычном пасе почти одно и то же

Автор: Alex 17.01.2003 19:35

В уроках на pascal.dax.ru есть пример поиска файла любого через рекурсию в заданном месте(например на диске C:) ну уж чтоб на всех дисках искалось я думаю не сложно сделать.

Автор: Noname 17.01.2003 20:31

Пошли - не помешает. Мона на мыло...

Автор: Alex 18.01.2003 14:53

ЧО послать то не пойму!!!

Автор: pascal65536 22.01.2003 20:39

сто лет на форум не заглядывал, а тут такая дискуссия ;)
посмотрите на моём сайте, в исходниках, аналог команды DIR она сканирует все вложенные каталоги, начиная с текущего, или какой укажешь.
Если переделать, то можно и файл искать, и по имени, и по расширению, и по маске, кому как захочется.  :smile.gif

http://www.pascal.hop.ru/sourses.htm

Автор: _Noname_ 23.01.2003 17:59

Вот спасибо доброму человеку!