|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Поиск файлов: FindFirst и FindNext
Доброго времени суток. Прошу извинить если такая тема уже есть на форуме, но в этой теме не нужно рассказывать мне как реализовать поиск файлов, мне хотелось бы узнать что не верно в коде поиска!
Код:
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; FindRes:=FindNext(SR); ListBox1.Items.Add(SR.Name); end; FindClose(SR); end; Работаю в Delphi 7! |
#2
|
||||
|
||||
Код:
FindFirst(Dir+'*.*',faAnyFile,SR); jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||
|
||||
Цитата:
допустим Dir:='d:\'; -> следовательно нужно найти все файлы на диске D |
#4
|
||||
|
||||
Можно через рекурсию.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
||||
|
||||
У тебя маска: *.*, то есть <куча букв><точка><куча букв>. К папкам она тоже относится.
И, кстати: Код:
FindFile(Dir+SR.Name+''); // входим в процедуру поиска с параметрами текущего каталога + каталог, что мы нашли jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 21.11.2012 в 21:01. |
#6
|
||||
|
||||
Цитата:
Цитата:
|
#7
|
||||
|
||||
Повторяю в третий раз. Маска выглядит как <куча букв><точка><куча букв>. Функция ничего о расширениях не знает. Она просто ищет файл по такой маске, то есть в названии которого есть точка. Если точки нет, то файл (или папка) под маску не подходит и отбрасывается.
Если нужно перебирать все файлы и папки, то маска должна быть просто * jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
||||
|
||||
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
||||
|
||||
Цитата:
Ошибка у тебя здесь: Код:
FindFile(Dir+SR.Name+''); // входим в процедуру поиска с параметрами текущего каталога + каталог, что мы нашли |
#10
|
||||
|
||||
Цитата:
MoS, рекурсия коварна! Может стек переполниться. (это так, к сведению) — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
||||
|
||||
Цитата:
Цитата:
|
#12
|
||||
|
||||
Раз никак не дойдет что тебе толкуют, вот тебе солюшен
Код:
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; FindRes:=FindNext(SR); ListBox1.Items.Add(SR.Name); end; FindClose(SR); end; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#13
|
||||
|
||||
Цитата:
Там у тебя добавляется пустая строка, а должен добавляться символ '\'. |
#14
|
||||
|
||||
Только не '\*.*', а просто '\', а то его функция добавит еще одну *.*, и получится \*.**.* Я кстати уже писал, ток ТС заигнорил.
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 21.11.2012 в 22:04. |
#15
|
||||
|
||||
Цитата:
Цитата:
Последний раз редактировалось MoS, 21.11.2012 в 22:16. |