Сделал, пришлось много поэкспериментировать.
В Delphi маски доступа имеют вид:
Код:
только чтение 0000001
Скрытый 0000010
Системный 0000100
Волум 0001000
директория 0010000
Архив 0100000
Линк 1000000
Некоторые папки windows имеют 14-битовые маски доступа (например 10010000010110), пришлось брать существующие маски, переводить их в двоичную, затем дополнять нулями, а потом выбирать бит папки. Если бит есть - значит это папка )
Реализация:
Код:
function decToBin(dec:Integer):String;
var ost:Integer;
del:Integer;
bin:String;
begin
while (dec >= 2) do begin
ost := dec mod 2;
dec := dec div 2;
bin := IntToStr(ost) + bin;
end;
bin := IntToStr(dec) + bin;
decToBin := bin;
end;
function fillBin(bin:String):String;
var binLen:Byte;
i:Byte;
begin
binLen := Length(bin);
if (binLen <> 14) Then begin
for i:= 1 to 14 - binLen do begin
bin := '0' + bin;
end;
fillBin := bin;
end else
fillBin := bin;
end;
function folderAttr(attrValue:Cardinal):Boolean;
var attr:String;
begin
attr := decToBin(attrValue);
attr := fillBin(attr);
if (attr[10] = '1') Then
folderAttr := True
else
folderAttr := False;
end;
Функция folderAttr возвращает TRUE если атрибут соответствует директории, FALSE если нет.