![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аттрибуты функции FindFirst - не могу понять
Андрей Сенченко © (2002-11-27 13:08:00)
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec
): Integer;
не понятно вот что : запуск с аттрибутом
faDirectory $00000010 Directory files
вот в этом примере
if findfirst("C:\*.*",faDirectory,workdir) = 0
then ...
выдает кроме директорий еще и файлы, содержащиеся в корне C:\
кто подскажет - в чем я не прав ?
Спасибо
Dmitriy Polskoy (2002-11-27 13:32:00) [1]А так будешь искать только ВЛОЖЕННЫЕ директории
procedure TForm1.SelectFiles(ASrsPath: String);
var
DSearchRec: TSearchRec;
FindResult: Integer;
function IsDirNotation(ADirName: string): Boolean;
begin
Result := (ADirName = ".") or (ADirName = "..");
end;
begin
FindResult := FindFirst(ASrsPath + "*.*", faDirectory, DSearchRec);
while FindResult = 0 do
begin
if ((DSearchRec.Attr and faDirectory) = faDirectory) and not
IsDirNotation(DSearchRec.Name) then
FindResult := FindNext(DSearchRec);
end;
end;
Андрей Сенченко (2002-11-27 13:27:00) [2]Все. Понял. Всем спасибо
Андрей Сенченко (2002-11-27 13:26:00) [3]ок. Подойдем с другой стороны : нужно выбрать ТОЛЬКО директории.
TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
Здесь ( уже после пробежки по директори поиска ) вроде как ничего не выцепишь.
Значит должен быть аттрибут выбора ( маска ), по которой выбираются только директории. Или нет ?
two_beer (2002-11-27 13:23:00) [4]Чтобы отбирать только директории проверяй атрибуты:
if (workdir.Attr and faDirectory) = workdir.Attr then
begin
// здесь получаешь имена найденных директорий, включая . и ..
end;
Воропай Андрей (2002-11-27 13:21:00) [5]Вот этот пример работаен нормально.
procedure TForm1.Button1Click(Sender: TObject);
var
sr: TSearchRec;
FileAttrs: Integer;
begin
StringGrid1.RowCount := 1;
FileAttrs := 0;
FileAttrs := FileAttrs + faDirectory;
with StringGrid1 do
begin
RowCount := 0;
if FindFirst("c:\*.*", FileAttrs, sr) = 0 then
begin
repeat
if (sr.Attr and FileAttrs) = sr.Attr then
begin
RowCount := RowCount + 1;
Cells[1,RowCount-1] := sr.Name;
Cells[2,RowCount-1] := IntToStr(sr.Size);
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
end;
McSimm (2002-11-27 13:13:00) [6]Все правильно:
The Attr parameter specifies the special files to include in addition to all normal files.