При работе с функциями поиска файлов в Delphi, разработчики иногда сталкиваются с неожиданными значениями атрибутов файлов. В частности, при использовании функции FindFirst(), в поле TSearchRec.Attr может появиться значение 2080, которое не соответствует ни одному из стандартных значений атрибутов, указанных в документации.
Проблема
Пользователь столкнулся с ситуацией, когда при поиске файлов с помощью функции FindFirst() в поле TSearchRec.Attr появилось значение 2080. В официальной документации по VCL указаны следующие атрибуты файлов:
faReadOnly - только для чтения
faHidden - скрытый
faSysFile - системный файл
faVolumeID - идентификатор тома
faDirectory - каталог
faArchive - архивный
faSymLink - символическая ссылка
faAnyFile - любой файл
Ни одна из комбинаций этих значений не дает в результате 2080. Операционная система, на которой произошел инцидент, - XP Embedded.
Решение
После тщательного анализа было выяснено, что файл, атрибут которого отображался как 2080, был сжат. В документации Delphi такое значение атрибута не описано, но в сторонней библиотеке JclFileUtils из Jedi Code Library обнаружены дополнительные значения атрибутов, в том числе faNotContentIndexed с кодом $00002000, что в десятичной системе соответствует 2080. Также было замечено, что в шестнадцатеричном представлении 2080 соответствует 0820, где нижний бит соответствует атрибуту архива (faArchive), а верхний - сжатому файлу (faCompressed), который не имеет прямого эквивалента в стандартных единицах Delphi, но может быть использован из JclFileUtils как faCompressed.
Пример кода
uses
JclFileUtils; // Подключение сторонней библиотеки для использования дополнительных атрибутов
// ...
var
sr: TSearchRec;
begin
if FindFirst('path\*.*', sr) = 0 then
begin
// Проверка на архивный атрибут
if (sr.Attr AND faArchive) <> 0 then
// Обработка архивных файлов
end;
// Проверка на сжатый атрибут (используя стороннюю библиотеку)
if (sr.Attr AND faCompressed) <> 0 then
// Обработка сжатых файлов
end;
// ...
end;
Вывод
Таким образом, значение 2080 в поле TSearchRec.Attr может указывать на сжатый файл, что не документировано в стандартных библиотеках Delphi. Для полноценной работы с такими файлами можно использовать сторонние библиотеки, такие как JclFileUtils, которые расширяют функциональность стандартных компонентов.
Эта информация может быть полезна разработчикам, работающим с файловой системой в среде Delphi, особенно при использовании XP Embedded, где могут встречаться нестандартные атрибуты файлов.
Пользователь столкнулся с недокументированным значением атрибута TSearchRec.Attr с числом 2080 в Delphi для XP Embedded, которое, согласно сторонним источникам, может указывать на сжатый файл.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.