Средства для работы с конфигурационными файлами.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Используй INI-файлы.
Для них в Windows API имеются специальные функции: GetPrivateProfileString(), WritePrivateProfileString() и др.
Для них в Windows API имеются специальные функции: GetPrivateProfileString(), WritePrivateProfileString() и др.
-
- Сообщения: 20
- Зарегистрирован: 13 фев 2011, 20:32
- Откуда: Russian Federation
- Контактная информация:
Спасибо, посмотрел. Эти функции старые, используются только для совместимости 16 битными приложениями. Может быть есть что поновее и функциональней, из стандартных средств? Что посоветуете не из стандартных средств? Чем пользуются люди? Вы чем пользуетесь?
Эти функции прекрасно работают и в Win32 приложениях.
В качестве альтернативы могу посоветовать использовать системный реестр. Функции Windows API для работы с ним начинаются с Reg... (типа RegOpenKeyEx(), RegQueryValueEx() и др.)
Однако это целесообразно делать, если твоя программа является системной утилитой, программным компонентом или сервисом, которым могли бы воспользоваться другие приложения Windows. Остальным программам лучше не засорять системный реестр сугубо локальными данными.
В качестве альтернативы могу посоветовать использовать системный реестр. Функции Windows API для работы с ним начинаются с Reg... (типа RegOpenKeyEx(), RegQueryValueEx() и др.)
Однако это целесообразно делать, если твоя программа является системной утилитой, программным компонентом или сервисом, которым могли бы воспользоваться другие приложения Windows. Остальным программам лучше не засорять системный реестр сугубо локальными данными.
"Поновее" "из стандартных средств" - Windows рекомендует писать в реестр Windows.StIX писал(а):Спасибо, посмотрел. Эти функции старые, используются только для совместимости 16 битными приложениями. Может быть есть что поновее и функциональней, из стандартных средств?
Т.е. само хранение настроек в конфигурационных файлах (INI-файлы) считается как бы устаревшим подходом.
А в число "и др.", упомянутых WinMain входят, например:
GetPrivateProfileInt
GetPrivateProfileSection
GetPrivateProfileSectionNames
Ещё могу предложить неплохой вариант - использовать для хранения данных какую-нибудь локальную СУБД и обращаться к ней через функции ODBC. Для Windows API эти функции начинаются с SQL... (SQLConnect(), SQLExecDirect(), SQLGetData(), и др.)
В качестве хранилища данных можно использовать таблицы Microsoft Access, dBase, Paradox или установить дополнительно MS SQL Server Compact Edition.
В качестве хранилища данных можно использовать таблицы Microsoft Access, dBase, Paradox или установить дополнительно MS SQL Server Compact Edition.
-
- Сообщения: 270
- Зарегистрирован: 09 янв 2010, 04:14
- Контактная информация:
Можно использовать Lua как язык для конфигурационного файла и средства его чтения.
-
- Сообщения: 20
- Зарегистрирован: 13 фев 2011, 20:32
- Откуда: Russian Federation
- Контактная информация:
Спасибо всем, кто отозвался. Все это конечно очень интересно (реестр, базы данных и скриптовый язык), но думаю это более актуально для больших приложений/проектов. А я пытаюсь написать "малюсенькую программу"... вобще недавно начал "Си" изучать. Для меня главное сделать программу как можно меньше по размеру и оптимизированей... Вот думаю придется пользоватся GetPrivateProfileString() и др.
Ну и правильно. Не надо шугаться от слов в MSDN о "лишь для совместимости с 16-битными приложениями".StIX писал(а):Спасибо всем, кто отозвался. Все это конечно очень интересно (реестр, базы данных и скриптовый язык), но думаю это более актуально для больших приложений/проектов. А я пытаюсь написать "малюсенькую программу"... вобще недавно начал "Си" изучать. Для меня главное сделать программу как можно меньше по размеру и оптимизированей... Вот думаю придется пользоватся GetPrivateProfileString() и др.
Между прочем, еще один плюс хранения настроек в INI-файле, а не в реестре Windows - это переносимость программы на другой компьютер. Так как в этом случае программа "все свое носит с собой", ведь INI-файл лежит в этом же каталоге! Т.е. для переноса программы на другой компьютер достаточно лишь скопировать все содержимое ее каталога!
-
- Сообщения: 270
- Зарегистрирован: 09 янв 2010, 04:14
- Контактная информация:
Правда с функциями "GetPrivateProfileString() и др." есть маленькая особенность, если не указывать полный путь к файлу, то считается что он находится в каталоге Windows.