|
Вопрос # 22/ вопрос открыт / |
|
Уважаемые эксперты, может кто - то сталкивался с проблемой пойска файлов в скрытых папках? А точнее сначала необходимо найти скрытые папки, а затем осуществить в них поиск файлов! Использую рекурсивный поиск -
Приложение: Переключить в обычный режим- ...
- procedure TForm1.FindFiles(Path:string);
- var FSearchRec, DsearchRec : TSearchRec;
- FindResult : integer;
- function IsDir(DirName:string):boolean;
- begin
- Result := (DirName = '.') or (DirName = '..');
- end;
- begin
- Path := GetDirectoryName(Path);
- FindResult :=
FindFirst(Path+FileName,$66,FSearchRec);//$66=faAnyFile+faArchive+faHidden+faSysfile+faReadOnly
- Application.ProcessMessages;
- try
- while Findresult = 0 do
- begin
- Listbox1.Items.Add(LowerCase(Path+FSearchRec.Name));
- FindResult := FindNext(FSearchRec);
- end;
- FindResult := FindFirst(Path+'*.*',faDirectory, DSearchRec);
- while FindResult = 0 do
- begin
- if ((DSearchRec.Attr and faDirectory) = faDirectory) and not
- IsDir(DSearchRec.Name) then
- FindFiles(Path+DSearchRec.Name);
- FindResult := FindNext(DSearchRec);
- end;
- finally
- FindClose(FSearchRec);
- end;
- end;
- ...
 |
Вопрос задал: West (статус: 1-ый класс)
Вопрос отправлен: 9 мая 2006, 01:07
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Dron
Предлагаю немного другой способ поиска. См. код в приложении. Он находит как скрытые файлы, так и скрытые каталоги. В Path задаётся путь для поиска (обязательно со слешем на конце), а в Mask - шаблон поиска. В данном случае будут найдены все файлы без исключения.
Если в качестве каталога для поиска указать скрытый каталог, то и в этом случае программа его просканирует.
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- Var DirInfo: TSearchRec; R: Integer; Path,Mask: String;
- begin
- Path:='C:';
- Mask:='*.*';
- R:=FindFirst(Path+Mask,FaAnyfile,DirInfo);
- While (R = 0) Do
- Begin
- if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
- (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
- ListBox1.Items.Add(Path+DirInfo.Name);
- R:=FindNext(DirInfo);
- End;
- SysUtils.FindClose(DirInfo);
- end;
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 9 мая 2006, 08:52
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: Вадим К
Проблема скорее всего здесь.
faAnyFile+faHidden
Первое указывает любой файл, второе - скрытый. Первое уже включает второе+нескрытые файлы.
Наиболее простой способ - создать две процедуры, одна будет искать только скрытые папки и если нашла, то запускать другую процедуру, которая уже производит поиск файлов в заданой папке.
Можно конечно и одной процедурой обойтись и розрулить всё за счёт if'ов, но мороки будет много.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 10 мая 2006, 12:36
Оценка за ответ: 3
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 29 июля 2006, 00:16; участников в обсуждении: 1.
|
Geron (статус: 1-ый класс), 29 июля 2006, 00:16 [#1]:
У Delphi вообще нет с этим проблем. В ситсеме глюк
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|