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

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

Атрибуты [D7, Win95/98]


BVV ©   (2005-01-20 14:22:00) 

Пытаюсь получить атрибуты файлов и папок в текстовом виде, сопоставлением:  1-faReadOnly, 2-faHidden, 4-faSysFile, 8-faVolumeID итд. Если у файла один из атрибутов то без проблем, а вот если у два, три или четыре то пулучается что то вроде 22, 33, 45, 50. При таком раскладе при сопоставлении получится более 100 вариантов. Если есть выход, подскажите. А может сушествует другая функция для получения атрибутты в текстовом виде.


VMcL   (2005-01-26 07:45:00) [1]

>> GuAV ©  (26.01.05 00:18) [10]

Тем более.
:o)


GuAV   (2005-01-26 00:18:00) [2]

VMcL ©   (26.01.05 0:09) [9]


> Result в начале фукнции будет nil


Ха. И думаете все поверили ?

function T: string;
begin
 Result := Result + 'T';
end;

procedure TForm1.FormCreate(Sender: TObject);
var S: string; I: Integer;
begin
 for I:= 0 to 4 do
   S := T;
 Caption := S;
end;


VMcL   (2005-01-26 00:09:00) [3]

>> begin...end ©  (23.01.05 12:21) [8]

Я, конечно, понимаю, что Result в начале фукнции будет nil, но иницализировать-то надо всё-таки.

:o)


begin...end   (2005-01-23 12:21:00) [4]

> [5] BVV   (23.01.05 10:15)

Вам нужно, чтобы, например, в строке была буква 'S', если файл имеет атрибут "Системный" (fa SysFile), буква 'R', если файл имеет атрибут "Только чтение" (fa ReadOnly), и т.д.?

Тогда проверяйте на каждый атрибут и прибавляйте к строке соответствующий символ в случае наличия этого атрибута, например:

function GetFileAttributesString(Attributes: Integer): String;
begin
 if Attributes and faReadOnly > 0 then Result := Result + 'R';
 if Attributes and faHidden > 0 then Result := Result + 'H';
 if Attributes and faSysFile > 0 then Result := Result + 'S';
 if Attributes and faVolumeID > 0 then Result := Result + 'V';
 if Attributes and faDirectory > 0 then Result := Result + 'D';
 if Attributes and faArchive > 0 then Result := Result + 'A'
end.


А можно (но не нужно) и как-нибудь извратиться, например:

function GetFileAttributesString(Attributes: Integer): String;
const
 Attr: array [1..6] of Integer =
   ((Ord('R') shl 8) or faReadOnly,
    (Ord('H') shl 8) or faHidden,
    (Ord('S') shl 8) or faSysFile,
    (Ord('V') shl 8) or faVolumeID,
    (Ord('D') shl 8) or faDirectory,
    (Ord('A') shl 8) or faArchive);
var
 I: Byte;
begin
 for I := Low(Attr) to High(Attr) do
   if Attributes and (Attr[I] and $FF) > 0 then
     Result := Result + Chr(Attr[I] shr 8)
end


:-)


Anatoly Podgoretsky   (2005-01-23 12:18:00) [5]

BVV   (22.01.05 18:41) [2]
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html&file_id=app-bits


VMcL   (2005-01-23 10:18:00) [6]

>> Sandman25 ©  (20.01.05 14:25) [1]

Теоретически правильно
... <>0
поскольку Integer.


BVV   (2005-01-23 10:15:00) [7]

...
var SR:TSearchRec;
...
memo.lines.Append(IntToStr(SR.Attr));

я просто не понимаю что за
ReadOnly.Visible := Atrribute and faReadOnly > 0;


BVV   (2005-01-23 10:12:00) [8]

...
var SR:TSearchRec;
...
memo.lines.Append(IntToStr(SR.Attr);


begin...end   (2005-01-22 18:47:00) [9]

> [2] BVV   (22.01.05 18:41)

А куда ещё подробнее? Раньше Вы как делали?


BVV   (2005-01-22 18:41:00) [10]

А по подробней, плиз


Sandman25   (2005-01-20 14:25:00) [11]

ReadOnly.Visible := Atrribute and faReadOnly > 0;
и т.д.


Наверх

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