Средства для работы с конфигурационными файлами.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

Всем доброго времени суток! Интересует, существуют ли какие-нибудь стандартные средства windows для работы с конфигурационными файлами? Пишу только на С.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Используй INI-файлы.
Для них в Windows API имеются специальные функции: GetPrivateProfileString(), WritePrivateProfileString() и др.
StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

Спасибо, посмотрел. Эти функции старые, используются только для совместимости 16 битными приложениями. Может быть есть что поновее и функциональней, из стандартных средств? Что посоветуете не из стандартных средств? Чем пользуются люди? Вы чем пользуетесь?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Эти функции прекрасно работают и в Win32 приложениях.
В качестве альтернативы могу посоветовать использовать системный реестр. Функции Windows API для работы с ним начинаются с Reg... (типа RegOpenKeyEx(), RegQueryValueEx() и др.)
Однако это целесообразно делать, если твоя программа является системной утилитой, программным компонентом или сервисом, которым могли бы воспользоваться другие приложения Windows. Остальным программам лучше не засорять системный реестр сугубо локальными данными.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

StIX писал(а):Спасибо, посмотрел. Эти функции старые, используются только для совместимости 16 битными приложениями. Может быть есть что поновее и функциональней, из стандартных средств?
"Поновее" "из стандартных средств" - Windows рекомендует писать в реестр Windows.
Т.е. само хранение настроек в конфигурационных файлах (INI-файлы) считается как бы устаревшим подходом.


А в число "и др.", упомянутых WinMain входят, например:

GetPrivateProfileInt
GetPrivateProfileSection
GetPrivateProfileSectionNames
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Ещё могу предложить неплохой вариант - использовать для хранения данных какую-нибудь локальную СУБД и обращаться к ней через функции ODBC. Для Windows API эти функции начинаются с SQL... (SQLConnect(), SQLExecDirect(), SQLGetData(), и др.)
В качестве хранилища данных можно использовать таблицы Microsoft Access, dBase, Paradox или установить дополнительно MS SQL Server Compact Edition.
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

Можно использовать Lua как язык для конфигурационного файла и средства его чтения.
StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

Спасибо всем, кто отозвался. Все это конечно очень интересно (реестр, базы данных и скриптовый язык), но думаю это более актуально для больших приложений/проектов. А я пытаюсь написать "малюсенькую программу"... вобще недавно начал "Си" изучать. Для меня главное сделать программу как можно меньше по размеру и оптимизированей... Вот думаю придется пользоватся GetPrivateProfileString() и др.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

StIX писал(а):Спасибо всем, кто отозвался. Все это конечно очень интересно (реестр, базы данных и скриптовый язык), но думаю это более актуально для больших приложений/проектов. А я пытаюсь написать "малюсенькую программу"... вобще недавно начал "Си" изучать. Для меня главное сделать программу как можно меньше по размеру и оптимизированей... Вот думаю придется пользоватся GetPrivateProfileString() и др.
Ну и правильно. Не надо шугаться от слов в MSDN о "лишь для совместимости с 16-битными приложениями".
Между прочем, еще один плюс хранения настроек в INI-файле, а не в реестре Windows - это переносимость программы на другой компьютер. Так как в этом случае программа "все свое носит с собой", ведь INI-файл лежит в этом же каталоге! Т.е. для переноса программы на другой компьютер достаточно лишь скопировать все содержимое ее каталога!
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

Правда с функциями "GetPrivateProfileString() и др." есть маленькая особенность, если не указывать полный путь к файлу, то считается что он находится в каталоге Windows.
Ответить