Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите, плиз как искать папки [D6, WinXP]


Алексей ©   (2004-06-22 01:35:00) 

Когда я использую FindFirst с атрибутом faDirectory, то находятся не только директории, но и файлы, а файлы мне не нужны. Как это можно сделать


alex_shpak   (2004-06-23 13:48:00) [1]

По-моему, вместо (F.Attr =...)or(F.Attr=...)or ... нужно писать (F.Attr and faDirectory)<>0. Так сказано в help'е по TSearchRec и так проще.


Anatoly Podgoretsky   (2004-06-23 11:35:00) [2]

Ужасы нашего городка.


TASADAR   (2004-06-23 09:03:00) [3]


function TForm1.FindFolders (Path: string): boolean;
var
 F: TSearchRec;
 Attr: Integer;
begin
 Result := false;
 Attr := faDirectory + faReadOnly + faHidden + faSysFile + faArchive;
 FindFirst(Path, Attr, F);

 if F.name <> '' then
 begin
   if (F.name <> '..') and (F.name <> '.') and ((F.Attr = 16) or (F.Attr = 17)
   or (F.Attr = 18) or (F.Attr = 48) or (F.Attr = 51) or (F.Attr = 19)
   or (F.Attr = 49) or (F.Attr = 50)) then
      begin
        // что-то делаю
        Result := True;
      end
   else
      begin
        while FindNext(F) = 0 do
          begin
            if (F.name <> '..') and (F.name <> '.') and ((F.Attr = 16) or (F.Attr = 17)
            or (F.Attr = 18) or (F.Attr = 48) or (F.Attr = 51) or (F.Attr = 19)
            or (F.Attr = 49) or (F.Attr = 50)) then
               begin
                 // что-то делаю
                 Inc(i1);
               end;
          end
      end;
 end;
 FindClose(F);
end;


TUser   (2004-06-22 09:37:00) [4]

Да вообще - проще из справки скопировать.


Anatoly Podgoretsky   (2004-06-22 09:16:00) [5]

Игорь   (22.06.04 07:40) [4]
Точно такая же не корректная проверка. см. FAQ по findfirst


Игорь   (2004-06-22 07:40:00) [6]

ну можно так:
if (SR.Attr and faDirectory) = srAttr then ...


MBo   (2004-06-22 07:35:00) [7]

>if Sr.Attr = faDirectory
это некорректная проверка. см. FAQ по findfirst


Игорь   (2004-06-22 07:29:00) [8]

Я сам недавно с такой же проблемой столкнулся


Игорь   (2004-06-22 07:26:00) [9]

Нужно делать проверку. Например

var
SR:TSearchRec;

begin
if FindFirst('c*.*',faDirectory,SR) = 0 then
repeat
if Sr.Attr = faDirectory then чего-то делаем...
until FindNext(SR) <> 0;
FindClose(SR);
end;

Без этого не обойтись.


Наверх

Титульная страница Поиск, карта сайта Написать письмо