Странное значение атрибута, сообщаемое FindFirst(), Attr = 2080

При поиске файлов с помощью FindFirst() я получаю значение атрибута в поле TSearchRec.Attr, равное 2080. Оно не указано в справке, поскольку доступны только эти значения, и ни одна из их комбинаций не дает 2080:

1 faReadOnly
2 скрытый
4 faSysFile
8 faVolumeID
16 faDirectory
32 faArchive
64 faSymLink
71 faAnyFile

Кто-нибудь знает, что означает 2080 и почему я получаю это значение атрибута? ОС является XP встроенной.

4 ответа

Решение

Оказывается, что файл, найденный FindFirst(), был сжат и, таким образом, был установлен сжатый бит. Мне потребовалось некоторое время, чтобы разобраться, и я не смог найти в Интернете ссылку, в которой указано действительное значение TSearchRec.Attr, когда установлен сжатый бит. Отключение "Сжать файл" в расширенных свойствах файлов сделало свое дело.

Атрибуты в TSearchRec сопоставить непосредственно с атрибутами файлов Windows, используемыми с TWin32FindData запись из FindFirstFile,

В шестнадцатеричном формате (всегда отображать битовые поля в шестнадцатеричном, а не десятичном виде) 2080 - это $0820, где ясно, что установлены два бита. Младший бит соответствует File_Attribute_Archive или Delphi's faArchive, а верхний бит соответствует File_Attribute_Compressed, Он не имеет эквивалента в модулях, поставляемых с Delphi, но вы можете использовать JclFileUtils.faCompressed символ из JCL.

В JclFileUtils Блок из библиотеки кодов джедаев, который я нашел:

faNormalFile        = $00000080;
...
faNotContentIndexed = $00002000;

Если 2080 в шестнадцатеричном, то это оно.

Смотрите также: http://www.tek-tips.com/viewthread.cfm?qid=1543818&page=9

РЕДАКТИРОВАТЬ: в то время как 2080 идентификатор десятичного числа и 2080 dec = 820 шестнадцатеричные, тогда атрибуты являются комбинацией

 faArchive     = $00000020;
 faCompressed  = $00000800;

Это извлечет бит faDirectory, и вам не нужно беспокоиться о том, установлен бит сжатия или нет.

if ((sr.Attr AND faDirectory) <> 0) then

begin 
     .......
end;
Другие вопросы по тегам