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

StackOverflow https://stackoverflow.com/questions/2005914

Вопрос

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

1 Плата за проезд только
2 фаХидден
4 Файл faSysFile
8 фаВолумеЙД
16 Директория
32 Архивация
64 Ссылка на faSymLink
71 фаАниФайл

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

Это было полезно?

Решение

Оказывается, что файл, найденный 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 id десятичный, а 2080 dec = 820 шестнадцатеричный, тогда атрибуты представляют собой комбинацию:

 faArchive     = $00000020;
 faCompressed  = $00000800;

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

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

begin 
     .......
end;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top