ini 文件是文本文件,中间的数据格式一般为:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName1=value1
KeyName2=value2
ini 文件可以分为几个 Section,每个 Section 的名称用 [] 括起来。
GetPrivateProfileString - 从 ini 文件的某个 Section 取得一个 key 的字符串,它的原形是:
1
2
3
4
5
6
7
8
|
GetPrivateProfileString(
LPCTSTR
lpAppName,
// 指向包含 Section 名称的字符串地址
LPCTSTR
lpKeyName,
// 指向包含 Key 名称的字符串地址
LPCTSTR
lpDefault,
// 如果 Key 值没有找到,则返回缺省的字符串的地址
LPTSTR
lpReturnedString,
// 返回字符串的缓冲区地址
DWORD
nSize
// 缓冲区的长度
LPCTSTR
lpFileName
// ini 文件的文件名
);
|
1
2
3
4
5
6
|
GetPrivateProfileSection(
LPCTSTR
lpAppName,
// 指向包含 Section 名称的字符串地址
LPTSTR
lpReturnedString,
// 返回数据的缓冲区地址
DWORD
nSize
// 返回数据的缓冲区长度
LPCTSTR
lpFileName
// ini 文件的文件名
);
|
这个 api 可以读出整个 section 的内容,当你不知道 section 中有哪些 key 的时候,可以使用这个 api 将整个 section 读出后再处理。
GetPrivateProfileSectionNames - 从 ini 文件中获得 Section 的名称,它的原形是:
1
2
3
4
5
|
GetPrivateProfileSectionNames(
LPTSTR
lpszReturnBuffer,
// 返回数据的缓冲区地址
DWORD
nSize
// 返回数据的缓冲区长度
LPCTSTR
lpFileName
// ini 文件的文件名
);
|
如果 ini 中有两个 Section: [sec1] 和 [sec2],则返回的是 'sec1',0,'sec2',0,0 ,当你不知道 ini 中有哪些 section 的时候可以用这个 api 来获取名称
WritePrivateProfileSection - 将一个整个 Section 的内容入 ini 文件的指定 Section 中,它的原形是:
1
2
3
4
5
|
WritePrivateProfileSection(
LPCTSTR
lpAppName,
// 指向包含 Section 名称的字符串地址
LPCTSTR
lpString
// 要写入的数据的地址
LPCTSTR
lpFileName
// ini 文件的文件名
);
|
1
2
3
4
5
6
|
WritePrivateProfileString(
LPCTSTR
lpAppName,
// 指向包含 Section 名称的字符串地址
LPCTSTR
lpKeyName,
// 指向包含 Key 名称的字符串地址
LPCTSTR
lpString
// 要写的字符串地址
LPCTSTR
lpFileName
// ini 文件的文件名
);
|
// c++_1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//#include <Windows.h>
#include <afx.h>
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR buffer[256];
TCHAR path[] = _T("C:\\Users\\sony\\Desktop\\boots.ini");
int len = GetPrivateProfileSectionNames(buffer, sizeof(buffer), path);
TCHAR *names = buffer;
TCHAR *end = names + len;
while (names < end)
{
CString name = names;
_tprintf(_T("==========%s=========\r\n"), name);
names += name.GetLength();
names++;
//获取section下面的所有属性
TCHAR buffer2[1024];
len = GetPrivateProfileSection(name, buffer2, sizeof(buffer2), path);
//遍历所有行
TCHAR *lines = buffer2;
while (*lines)
{
CString line = lines;
_tprintf(_T("\t%s\r\n"), line);
lines += line.GetLength();
lines++;
}
}
return 0;
}