![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите, плиз как искать папки [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;
Без этого не обойтись.