Показать сообщение отдельно
  #5  
Старый 12.06.2012, 16:20
PRStudio PRStudio вне форума
Прохожий
 
Регистрация: 18.02.2012
Сообщения: 13
Репутация: 143
По умолчанию

Сделал, пришлось много поэкспериментировать.
В 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 если нет.
Ответить с цитированием