|
#1
|
|||
|
|||
Поиск файла
Добрый день, товарищи программисты!
Помогите пожалуйста! В предыдущей теме был задан вопрос поиска файла. Мне нужно найти все файлы с расширениями .doc .xls .txt .rtf и ввести их пути в memo1. Сложность заключается в том, что файлов множество, найти их нужно все. Спасибо!!! |
#2
|
||||
|
||||
Код:
procedure Find(const Path, SearchMask : String; var Memo : TMemo); var fs : TSearchRec; i : Integer; begin Application.ProcessMessages; i := FindFirst(Path + '\' + SearchMask, faAnyFile, fs); while i = 0 do begin Memo.Lines.Add(path + '\' + fs.Name); i := FindNext(fs); end; i := FindFirst(Path + '\*', faDirectory or faAnyFile, fs); while i = 0 do begin if (fs.Name <> '.') and (fs.Name <> '..') and ((fs.Attr and faDirectory) <> 0) then Find(Path + '\' + fs.Name, SearchMask, Memo); i := FindNext(fs); end; FindClose(fs); end; Не профи, но и не чайник . D6 - лучше не придумали. Пока. Последний раз редактировалось zip000, 09.07.2008 в 21:39. |
#3
|
|||
|
|||
Можно съэкономить время, если:
- искать в 1 проход с рекурсией по каталогам сразу; - искать по маске *.* и внутри проверять соответствие. Код:
uses Masks; procedure TForm1.SearchFiles(APath : String); const SearchMasks : Array [0..3] Of String = ('*.doc','*.xls','*.txt','*.rtf'); var iFound : Integer; F : TSearchRec; function IsMatchMask(AFileName : String) : Boolean; var I : Integer; begin Result := False; For I := Low(SearchMasks) To High(SearchMasks) Do Begin Result := MatchesMask(AFileName,SearchMasks[i]); If Result Then Break; End; end; begin APath := IncludeTrailingPathDelimiter(APath); iFound := FindFirst(APath + '*.*',faAnyFile,F); While iFound = 0 Do Begin If (F.Attr And faDirectory) <> 0 Then Begin If (F.Name <> '.') And (F.Name <> '..') Then SearchFiles(APath + F.Name); End Else If IsMatchMask(F.Name) Then Memo1.Lines.Add(APath + F.Name); iFound := FindNext(F); End; FindClose(F); end; procedure TForm1.Button1Click(Sender: TObject); begin // Ишем на диске C: Memo1.Lines.Clear; SearchFiles('c:'); end; Если надо автоматом перебрать все диски, то это уже чуть сложнее - надо получить список всех дисков и в цикле пройти по ним. |
#4
|
||||
|
||||
lmikle, думается что ваш вариант с перебором всех подряд файлов будет медленнее работать, обычно файлов на дисках десятки тысяч, поэтому времени это займет много.
Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#5
|
|||
|
|||
Огромное спасибо!!!
Буду пробовать |