Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возник очень интересный вопрос (по работе с каталогами)

14K
27 октября 2006 года
Pheonix
31 / / 23.10.2006
Начал работать над одной прогой, и тут же встала проблемка (правда решена, но все же интересно) при сканировании каталога на подкаталоги при помощи функций FindFirst(), FindNext() почему-то не хватает одной константы (я так думаю). faDirectory имеет значение 16, но есть еще одна константа 48 которая тоже является каталогом, но про неё в модуле SysUtils ничего не сказано, она даже не объявлена хотя работает. Почему так???
303
27 октября 2006 года
makbeth
1.0K / / 25.11.2004
16 = 10000 (bin)
48 = 110000 (bin)
5 бит функции FindXXX скорее всего не распознают, т. о. получается faDirectory. Попробуй еще 112, скорее всего получится тоже самое.
309
28 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Что значит "не объявлена"?
247
28 октября 2006 года
wanja
1.2K / / 03.02.2003
Пши не =faDirectory, а and faDirectory<>0
14K
30 октября 2006 года
Pheonix
31 / / 23.10.2006
[QUOTE=wanja]Пши не =faDirectory, а and faDirectory<>0[/QUOTE]
в таком случае будут искаться все файлы, исключая каталоги.
[QUOTE=makbeth]
По умолчанию
16 = 10000 (bin)
48 = 110000 (bin)
5 бит функции FindXXX скорее всего не распознают, т. о. получается faDirectory. Попробуй еще 112, скорее всего получится тоже самое.
[/QUOTE]
эту то проблему я решил, просто объявил новую константу = 48, а что означает 112, тоже константа папки?
547
31 октября 2006 года
Hydra
488 / / 20.06.2006
Ага, и еще 240 ;)
ибо флаги FindNext проверяет как показал wanja
а and faDirectory = a and 16 = a and 48 = a and 112 = .....
Т.е. неважно какое число, главное чтобы 4ый бит у него был 1. Это кстати и числа 49, 113 - да сколько угодно.
303
31 октября 2006 года
makbeth
1.0K / / 25.11.2004
Так... Я тут немного был не прав... (не было исходника SysUtils под рукой)
Итак, твоя магическая константа 48 означает всего лишь:
 
Код:
faDirectory or faArchive

т.е. папка с атрибутом "архивная".
Соответственно 112 будет означать:
 
Код:
faDirectory or faArchive or faSymLink

т.е. символическая ссылка NTFS на папку с атрибутом "архивная".
309
01 ноября 2006 года
el scorpio
1.1K / / 19.09.2006
Всё правильно - тяжкое наследие MSDOS - в строке каталога есть байт, хранящий все атрибуты элемента, причём каждый атрибут хранится в отдельном бите.
Список атрибутов: "Архивный", "Только для чтения", "Скрытый", "Системный", "Каталог", "Метка тома" - ещё два бита были зарезервированны под нужды, которые по сей день ещё не придумали.
Вышеприведённые константы - это значения, в которых один из битов равен true. Соотвественно, "faDirectory or faArchive or faSymLink" - с математической точки зрения эквивалентно "faDirectory + faArchive + faSymLink" - это число, в котором требуемые биты будут равны true, а все прочие - false.
14K
02 ноября 2006 года
Pheonix
31 / / 23.10.2006
ну все всем спасибо, вопрос исчерпан!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог