读取ini

来源:互联网 发布:linux终端退出服务器 编辑:程序博客网 时间:2024/05/11 15:05

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(
LPCTSTRlpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTRlpKeyName, // 指向包含 Key 名称的字符串地址
LPCTSTRlpDefault, // 如果 Key 值没有找到,则返回缺省的字符串的地址
LPTSTRlpReturnedString, // 返回字符串的缓冲区地址
DWORDnSize // 缓冲区的长度
LPCTSTRlpFileName // ini 文件的文件名
);
GetPrivateProfileSection - 从 ini 文件中读出整个 Section 的内容,它的原形是:

1
2
3
4
5
6
GetPrivateProfileSection(
LPCTSTRlpAppName, // 指向包含 Section 名称的字符串地址
LPTSTRlpReturnedString, // 返回数据的缓冲区地址
DWORDnSize // 返回数据的缓冲区长度
LPCTSTRlpFileName // ini 文件的文件名
);

这个 api 可以读出整个 section 的内容,当你不知道 section 中有哪些 key 的时候,可以使用这个 api 将整个 section 读出后再处理。


GetPrivateProfileSectionNames - 从 ini 文件中获得 Section 的名称,它的原形是:

1
2
3
4
5
GetPrivateProfileSectionNames(
LPTSTRlpszReturnBuffer, // 返回数据的缓冲区地址
DWORDnSize // 返回数据的缓冲区长度
LPCTSTRlpFileName // ini 文件的文件名
);

如果 ini 中有两个 Section: [sec1] 和 [sec2],则返回的是 'sec1',0,'sec2',0,0 ,当你不知道 ini 中有哪些 section 的时候可以用这个 api 来获取名称


WritePrivateProfileSection - 将一个整个 Section 的内容入 ini 文件的指定 Section 中,它的原形是:

1
2
3
4
5
WritePrivateProfileSection(
LPCTSTRlpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTRlpString // 要写入的数据的地址
LPCTSTRlpFileName // ini 文件的文件名
);
WritePrivateProfileString - 将一个 Key 值写入 ini 文件的指定 Section 中,它的原形是:

1
2
3
4
5
6
WritePrivateProfileString(
LPCTSTRlpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTRlpKeyName, // 指向包含 Key 名称的字符串地址
LPCTSTRlpString // 要写的字符串地址
LPCTSTRlpFileName // 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;}



原创粉丝点击