Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 22

Раздел: Delphi » Прочее
/ вопрос открыт /

Уважаемые эксперты, может кто - то сталкивался с проблемой пойска файлов в скрытых папках? А точнее сначала необходимо найти скрытые папки, а затем осуществить в них поиск файлов! Использую рекурсивный поиск -

Приложение:
  1. ...
  2. procedure TForm1.FindFiles(Path:string);
  3. var FSearchRec, DsearchRec : TSearchRec;
  4. FindResult : integer;
  5. function IsDir(DirName:string):boolean;
  6. begin
  7. Result := (DirName = '.') or (DirName = '..');
  8. end;
  9. begin
  10. Path := GetDirectoryName(Path);
  11. FindResult := FindFirst(Path+FileName,$66,FSearchRec);//$66=faAnyFile+faArchive+faHidden+faSysfile+faReadOnly
  12. Application.ProcessMessages;
  13. try
  14. while Findresult = 0 do
  15. begin
  16. Listbox1.Items.Add(LowerCase(Path+FSearchRec.Name));
  17. FindResult := FindNext(FSearchRec);
  18. end;
  19. FindResult := FindFirst(Path+'*.*',faDirectory, DSearchRec);
  20. while FindResult = 0 do
  21. begin
  22. if ((DSearchRec.Attr and faDirectory) = faDirectory) and not
  23. IsDir(DSearchRec.Name) then
  24. FindFiles(Path+DSearchRec.Name);
  25. FindResult := FindNext(DSearchRec);
  26. end;
  27. finally
  28. FindClose(FSearchRec);
  29. end;
  30. end;
  31. ...


West Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: West (статус: 1-ый класс)
Вопрос отправлен: 9 мая 2006, 01:07
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Dron

Предлагаю немного другой способ поиска. См. код в приложении. Он находит как скрытые файлы, так и скрытые каталоги. В Path задаётся путь для поиска (обязательно со слешем на конце), а в Mask - шаблон поиска. В данном случае будут найдены все файлы без исключения.
Если в качестве каталога для поиска указать скрытый каталог, то и в этом случае программа его просканирует.

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. Var DirInfo: TSearchRec; R: Integer; Path,Mask: String;
  3. begin
  4. Path:='C:';
  5. Mask:='*.*';
  6. R:=FindFirst(Path+Mask,FaAnyfile,DirInfo);
  7. While (R = 0) Do
  8. Begin
  9. if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
  10. (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
  11. ListBox1.Items.Add(Path+DirInfo.Name);
  12. R:=FindNext(DirInfo);
  13. End;
  14. SysUtils.FindClose(DirInfo);
  15. end;


Ответ отправил: Dron (статус: Студент)
Время отправки: 9 мая 2006, 08:52
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Вадим К

Проблема скорее всего здесь.
faAnyFile+faHidden
Первое указывает любой файл, второе - скрытый. Первое уже включает второе+нескрытые файлы.
Наиболее простой способ - создать две процедуры, одна будет искать только скрытые папки и если нашла, то запускать другую процедуру, которая уже производит поиск файлов в заданой папке.
Можно конечно и одной процедурой обойтись и розрулить всё за счёт if'ов, но мороки будет много.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 10 мая 2006, 12:36
Оценка за ответ: 3


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 29 июля 2006, 00:16; участников в обсуждении: 1.
Geron

Geron (статус: 1-ый класс), 29 июля 2006, 00:16 [#1]:

У Delphi вообще нет с этим проблем. В ситсеме глюк

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.