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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 22:21   #1
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
Вопрос Ищем файлы

Есть код:
procedure ffind(cat:string); //каталог, откуда начать поиск
var sea:TSearchRec;
res:integer; //результат поиска (0 или нет)
begin
Application.ProcessMessages;
res:=FindFirst(cat+'*.*',faAnyFile, sea); //ищем первый файл
res:=findNext(sea);//ищем следующий файл
While res=0 do
begin
if (Sea.Attr=faDirectory) and ((Sea.Name='.')or(Sea.Name='..')) then//чтобы не было файлов . и..
begin
Res:=FindNext(sea);
Continue;//продолжаем цикл
end;

if (Sea.Attr=faDirectory) then//если нашли директорию, то ищем файлы в ней
begin
Ffind(cat+Sea.Name+'\');//рекурсивно вызываем нашу процедуру
Res:=FindNext(Sea);//ищем след. файл
Continue;//продолжаем цикл
end;
form1.ListBox1.Items.Add(Sea.Name);//добавляем в Listbox:Tlistbox имя файла
Res:=FindNext(Sea);//ищем след. файл
end;
FindClose(Sea);//освобождаем пересенную поиска
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Ffind(edit1.Text) ;
end;


как мне подправить его чтоб он искал файлы с определенным расширением??
Изменяю строку
res:=FindFirst(cat+'*.*',faAnyFile, sea); на
res:=FindFirst(cat+'*.txt',faAnyFil e,sea);
ищет только один фаил и на этом поиск прекращается
VenMaster вне форума Ответить с цитированием
Старый 02.06.2008, 22:44   #2
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Код:
Procedure go;
Var SR:TSearchRec;
FindRes:Integer;
begin
  with form1 do begin
    ListBox1.Clear;
    FindRes:=FindFirst('c:/maps *.map',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;
      ListBox1.Items.Add(SR.Name);
      FindRes:=FindNext(SR);
      end;
    FindClose(SR);
  end;
end;
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 02.06.2008, 22:54   #3
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
По умолчанию

Чето токо у меня теперь не заходит в папки
VenMaster вне форума Ответить с цитированием
Старый 02.06.2008, 23:04   #4
knight
Дон Кихот
Форумчанин
 
Аватар для knight
 
Регистрация: 17.01.2008
Сообщений: 130
По умолчанию

Код:
 if ((SR.Attr and faDirectory)=faDirectory) and // если найденный элемент каталог и  
     ((SR.Name='.')or(SR.Name='..')) then // он имеет название "." или "..", тогда:
Эту проверку убери, тогда появятся директории....
knight вне форума Ответить с цитированием
Старый 02.06.2008, 23:12   #5
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
По умолчанию

('c:\ *.txt',faAnyFile,SR); // через пробел путь и маска
Точно ни че не путаете с пробелом вообще ниче не ищет, а без пробела в каталоги не заходит
VenMaster вне форума Ответить с цитированием
Старый 02.06.2008, 23:23   #6
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

У меня в программе было
('maps *.map',faAnyFile,SR); // через пробел путь и маска
Где рядом папка maps и файлы *.map в ней
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 02.06.2008, 23:30   #7
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
По умолчанию

Всеже я чет не воткнул почему у меня предположем в c:\ ищет файлы, а вот в папках C:\..\..\ не ищет??
VenMaster вне форума Ответить с цитированием
Старый 02.06.2008, 23:46   #8
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Посмотрите здесь:

http://www.delphicode.ru/files/file_search.htm
Dux вне форума Ответить с цитированием
Старый 03.06.2008, 00:47   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не, ребята, ну всё же очевидно, папки, это такие элементы файловой системы.
Указываете в маске расширение, будут искаться файлы и папки только с указанным расширением!!!!!!
таким образом, решения принципиальных два:
либо искать файлы с заданной маской, а потом искать папки по '*.*'

либо, искать нужно всё по '*.*'
res:=FindFirst(cat+'*.*',faAnyFile, sea);
а потом расширение у файлов проверять дополнительным if'ом:
if AnsiUpperCase(ExtractFileExt(sea.Na me))='.MAP' then begin
{обработка файла с расширением MAP}
end;

и, кстати, найденные директории лучше проверять не на сравнение с faDirectory
а так:
if (sea.Attr and faDirectory)<>0 then begin

тогда найдутся и те директории, у который стоит аттрибут скрытые/системные и прочая...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53