Главная

INI-файлы устарели и их заменил реестр

Оцените материал
(1 Голосовать)

INI-файлы устарели и их заменил реестр

· INI-файлы не поддерживают Unicode. Даже хотя у вас есть Unicode-варианты функций по работе с INI-файлами, они всё равно пишут всё в ANSI по соображениям совместимости (у вас есть кривой способ создать Unicode-ный INI-файл, но вам придётся выйти за API, чтобы сделать это). Это не было проблемой в Win16, потому что Win16 тоже не поддерживала Unicode!

· INI-файлы не поддерживают точную настройку доступа. Поскольку это просто текстовый файл, то любые настройки безопасности возможны только на файловом уровне, а не уровне отдельных ключей. Вы не можете сказать "кто угодно может изменять эту секцию, а вот этот раздел может изменяться только админами". Это также не было проблемой в Win16, потому что в Win16 не было безопасности.

· Если у вас есть два записывающих потока, то это может привести к потере данных. Рассмотрим два потока, которые пытаются обновить INI-файл. Если они работают одновременно, то вы можете получить такой сценарий:

Thread 1 Thread 2

Читает INI файл

Читает INI файл

Записывает в INI файл + X

Записывает в INI файл + Y

· Обратите внимание, что второй поток, обновляющий INI, случайно может затереть обновление от первого потока. И снова: это не было проблемой в Win16, потому что она была системой с кооперативной многозадачностью. Что означало, что пока вы явно не захотели отдать процессор другому потоку, никакой поток не мог вас прервать.

· INI-файлы подвержены атакам отказа в обслуживании. Программа может открыть INI-файл в эксклюзивном режиме и заблокировать всех. Это было бы просто ужасно, если бы в ini-файлах хранились бы настройки по безопасности, потому что это не дало бы никому узнать, какие же вообще у нас настройки безопасности. Это было также проблемой и в Win16, но поскольку у нас не было безопасности вообще, то плохая программа могла просто удалить файл!

· INI-файлы содержат только строки. Если вам нужно хранить двоичные данные, то вам нужно как-то закодировать их в строку.

· Парсинг INI-файла - это относительно медленная операция. Каждый раз, когда вы читаете или пишете значение в INI-файл, файл должен быть целиком загружен в память и распарсен. Если вы записываете в INI-файл три строки, то этот INI-файл загружается и парсится три раза, а также три раза записывается на диск. В Win16 несколько последовательных операций с INI файлами не приводили к записи, чтению или парсингу, потому что операционная система была с кооперативной многозадачностью. Когда вы в первый раз обращались к INI-файлу, он читался, парсился и кэшировался. Все ваши дальнейшие обращения приводили к работе с кэшем. Кэш выгружался на диск, когда вы передавали процессор другому потоку.

· Многие программы открывают и работают с INI-файлами напрямую, минуя официальный API. Это означает, что теперь формат INI-файлов фиксирован и мы не можем его поменять. Даже если бы мы захотели добавить что-то (безопасность на ключи или вложенность) - мы не смогли бы этого сделать. Что ещё хуже, многие программы содержат ошибки или ограничения в своих парсерах INI-файлов, так что на практике вы можете столкнуться с ситуацией, когда вы не можете хранить строку длиннее 70 символов, иначе вылетит другая программа, которая читает этот файл.

· INI-файлы имеют ограничение в максимальный размер - не более 32 Кб.

· Каталог по-умолчанию для INI-файлов - это папка Windows! Это однозначно очень плохо для всех систем на базе Windows NT, потому что на них только администраторы имеют туда доступ.

· INI-файлы имеют только два уровня структуры. Любой INI-файл состоит из секций, а каждая секция состоит из пары ключ=значение. Вы не можете вносить секции внутрь других секций.

· Централизованное управление INI-файлами тяжело. Поскольку они могут быть где угодно в системе, то системный администратор не может написать скрипт, узнающий "все ли используют последнюю версию FireFox?". А поскольку INI-файлы не поддерживают безопасность, то они также не могут сделать скрипт, который говорит "Установить всем настройки FireFox в XYZ и не давать пользователям их менять" (например, настройки прокси).

Реестр был попыткой решить эти проблемы. Вы можете спорить, были ли это проблемы, которые требовали решения, но команда Windows NT определённо посчитала, что они того стоили.

Прочитано 5651 раз
Другие материалы в этой категории: « Работа с ini файлами. Объект Inifiles

Авторизация



Счетчики