![]() |
Как вывести структуру директорий на компакт-диске. Возможно вопрос для ФАК'а
Столкнулся со следующей проблемой - необходимо вывести в дерево структуру каталогов. Была написана следующая функция, рекурсивно считывающая файлы и каталоги:
Код:
void __fastcall TForm1::FoundFile(AnsiString Dir,TTreeNode *Node)Проблема оказалась в следующем - атрибуты директории на компакте имеют значение не 0х010(константа faDirectory) а 0х011 - добавляется лишний бит. То есть, если вы предполагаете использовать подобный механизм для получения списка директорий на ВСЕХ дисках должно быть вот так: Код:
void __fastcall TForm1::FoundFile(AnsiString Dir,TTreeNode *Node)Точнее правильно так: Код:
void __fastcall TForm1::FoundFile(AnsiString Dir,TTreeNode *Node) |
Это не только для компакта так будет. Сделай на жёстком диске системный, или скрытый, или read-only каталог и попробуй с ним первый вариант - он точно так же скажет, что это файл ;) Дело в том, что каждый атрибут - это отдельный бит в слове атрибутов, и каталог - только один из них. Так что даже пример
Код:
if(sr.Attr ==0х010||sr.Attr ==0х011){Код:
if (sr.Attr & faDirectory) { |
Спасибо всем. Действительно использование битовой маски - это единственное решение.
|
| Часовой пояс GMT +4, время: 15:34. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.