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