
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);
|
|
Webmoney Z163628999150, R617151845974
|