Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.07.2008, 21:22
garik garik вне форума
Прохожий
 
Регистрация: 17.02.2008
Сообщения: 15
Репутация: 5
Вопрос Поиск файла

Добрый день, товарищи программисты!
Помогите пожалуйста!
В предыдущей теме был задан вопрос поиска файла. Мне нужно найти все файлы с расширениями .doc .xls .txt .rtf и ввести их пути в memo1.
Сложность заключается в том, что файлов множество, найти их нужно все.
Спасибо!!!
Ответить с цитированием
  #2  
Старый 09.07.2008, 21:33
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Код:
  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;
Path - эт путь где искать, можно указать просто диск (С, D и т.д.), поиск будет осуществляться во всех вложенных папках, SearchMask - маска поиска, чтоб найти все txt файлы пишем тут *.txt, Memo - сюда будут выводится резалты поиска. Просто по очереди ищите файлы каждого разрешения.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.

Последний раз редактировалось zip000, 09.07.2008 в 21:39.
Ответить с цитированием
  #3  
Старый 10.07.2008, 01:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно съэкономить время, если:
- искать в 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  
Старый 10.07.2008, 01:50
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

lmikle, думается что ваш вариант с перебором всех подряд файлов будет медленнее работать, обычно файлов на дисках десятки тысяч, поэтому времени это займет много.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #5  
Старый 11.07.2008, 18:33
garik garik вне форума
Прохожий
 
Регистрация: 17.02.2008
Сообщения: 15
Репутация: 5
По умолчанию

Огромное спасибо!!!
Буду пробовать
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter