Чтение и запись INI-файлов в Visual C++

Категория: C / C++ Комментариев: 0


WinAPI предоставляет две полезные функции для чтения и записи INI-файлов: GetPrivateProfileString и WritePrivateProfileString.

Функция GetPrivateProfileString, как не трудно догадаться по названию, служит для чтения данных из INI-файлов. Вот как выглядит ее вызов:

DWORD WINAPI GetPrivateProfileString(
 __in LPCTSTR lpAppName,
 __in LPCTSTR lpKeyName,
 __in LPCTSTR lpDefault,
 __out LPTSTR lpReturnedString,
 __in DWORD nSize,
 __in LPCTSTR lpFileName
);

Как видно, она принимает 6 параметров:
lpAppName — имя секции, в которой находится считываемй ключ. Если в качестве этого параметра передать NULL, функция вернет список всех секций в указанном INI-файле
lpKeyName — имя ключа, чье значение нужно считать. Если в качестве параметра передать NULL, то функция, по аналогии с секциями, вернет имена всех ключей в секции.
lpDefault — строка по умолчанию. Если в указанном INI-файле ключ lpKeyName не найден, то функция вернет это значение.
lpReturnedString — буфер, в который будут записаны возвращаемые функцией данные
lpFileName — имя считываемого INI-файла.

Функция WritePrivateProfileString служит... барабанная дробь... для записи данных в INI-файлы! Ее вызов выглядит следующим образом:

BOOL WINAPI WritePrivateProfileString(
 __in LPCTSTR lpAppName,
 __in LPCTSTR lpKeyName,
 __in LPCTSTR lpString,
 __in LPCTSTR lpFileName
);

Передаваемые ей входные данные включают:
lpAppName — имя секции, в которую нужно записать значение. Если секции с таким именем не существует, она будет создана. Имя секции регистронезависимо.
lpKeyName — имя ключа, ассоциируемого со значением. Если такого ключа нет, он будет создан автоматически. Внимание! Если в качестве имени ключа передать NULL, будет удалена вся секция lpAppName.
lpString — строка, которую следует записать в INI-файл. Если в качестве этой строки передать NULL, то ключ lpKeyName будет удален.

Функция возвращает TRUE в случае удачной записи данных в файл и FALSE в случае неудачи.

Я для использования этих функций написал две функции-обертки соответственно для чтения и записи INI-файлов:

char *IniRead(char *filename, char *section, char *key){
 char *out = new char[512];
 GetPrivateProfileString(
 (LPCSTR)section,
 (LPCSTR)key,
 NULL,
 out,
 200,
 (LPCSTR)filename
 );
 return out;
}
bool IniWrite(char *filename, char *section, char *key, char *data){
 return WritePrivateProfileString(
 (LPCSTR)section,
 (LPCSTR)key,
 (LPCSTR)data,
 (LPCSTR)filename
 );
}

Их вызов выглядит прмерно так:

char *data = "test test test";
char *outdata = new char[512];
if (IniWrite("c:\\file.ini", "testsection", "testkey", data))
 outdata = IniRead("c:\\file.ini", "testsection", "testkey");
MessageBox(NULL, outdata, NULL, 0);

Скачать пример

Автор: Кто-то   @   9 февраля 2010 Комментариев: 0
Метки : ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

Комментариев: 0

Комментариев к этой записи поке нет. Ваш комментарий будет первым.
оставить комментарий

Предыдущая запись
«
Следующая запись
»