Visual Studio 2010读写ini文件(1)读出ini文件所有键名、节名、键值
来源:互联网 发布:linux可以用网银吗 编辑:程序博客网 时间:2024/06/03 17:25
需求描述:用visual studio开发的客户端程序,需要将程序的配置保存到ini文件中。每次打开程序都会读入ini文件,根据里面的记录来恢复客户端的配置;客户端的配置修改之后,需要将修改保存写入ini文件中。
ini文件(即Initialization file):这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。(如下图所示)
读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。
(1)ini文件读取所有节名、键名、键值:
1.读取ini文件中的节名、键名、键值调用的函数:
获取所有节名函数:GetPrivateProfileSectionNames(returnBuff, MAX_PATH, m_szPath);//获取节名
获取所有键名键值函数:GetPrivateProfileSection(pTemp, returnKey, MAX_PATH, m_szPath);//获取键名键值
(其中m_szPath为ini文件的路径,MAX_PATH为读取的字节数,得到的结果保存在字符型数组变量 returnBuff、pTemp、returnKey中)
2.代码实现读出ini文件中节数和所有节名:
上面函数中得到的保存所有键名、节名的字符数组变量returnBuff,键名节名之间用 ‘\0’隔开,当遇到以‘\0’开头的元素时说明,已经读完最后一个键名/节名。利用这个特性可以写如下代码得到ini文件中的所有节名和总共的节数:
/*统计共有多少个节节名的分离方法:若returnBuff数组的第一字符是'\0'字符,则表明有0个节。否则,从returnBuff数组的第一个字符开始,顺序往后找,直到找到一个'\0'字符,若该字符的后继字符不是 '\0'字符,则表明前面的字符组成一个节名。若连续找到两个'\0'字符,则统计结束*/
TCHAR returnBuff[2048]; int i; //i指向数组pTemp的某个位置,从0开始,顺序后移int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量int count=0; //统计节的个数char * pSectionName; //保存找到的某个节名字符串的首地址 LPTSTR pTemp; LPTSTR pKeyTemp; GetPrivateProfileSectionNames(returnBuff, 2048, ".\\SetAllListDate.ini");//获取节名,其中".\\SetAllListDate.ini"是ini文件的路径 pTemp = returnBuff; for(i=0;i<2048;i++,j++){ if(pTemp[0]=='\0') break; //如果第一个字符就是0,则说明ini中一个节也没有 if(pTemp[i]=='\0') { pSectionName=&pTemp[i-j]; //找到一个0,则说明从这个字符往前,减掉j个偏移量, //就是一个节名的首地址 j=-1; //找到一个节名后,j的值要还原,以统计下一个节名地址的偏移量 //赋成-1是因为节名字符串的最后一个字符0是终止符,不能作为节名 //的一部分 //在获取节名的时候可以获取该节中键的值,前提是我们知道该节中有哪些键。 AfxMessageBox(pSectionName); //pSectionName是找到的节名,把找到的显示出来 if(pTemp[i+1]==0) { break; //当两个相邻的字符都是0时,则所有的节名都已找到,循环终止 } } }
3. 代码实现读出一个节中所有的键名和键值(以“key=value“字符串的形式返回):
void readKeysAndValues(){TCHAR szBuf[1024]; memset(szBuf,0,1024);INT nNum=0;INT nLen= 0;nNum=::GetPrivateProfileSection(_T("ListName"),szBuf,1024,".\\SetAllListDate.ini");char * szWork; //保存找到的某个节名字符串的首地址while(nLen<=1024){szWork=&szBuf[nLen];//此处的szWork为所需内容nLen=nLen+1;if(szBuf[nLen]==0) //当指针指向0时说明已经读到末尾break;nLen+=_tcslen(szWork);}}
再进一步,代码实现取出所有的键值:
void readKeyValues(){TCHAR szBuf[1024]; memset(szBuf,0,1024);INT nNum=0;INT nLen= 0;nNum=::GetPrivateProfileSection(_T("ListName"),szBuf,1024,".\\SetAllListDate.ini");char * szWork; //保存找到的某个节名字符串的首地址char *keyValue;while(nLen<=1024){szWork=&szBuf[nLen];//此处的szWork为所需内容nLen=nLen+1;if(szBuf[nLen]==0)break;nLen+=_tcslen(szWork);int index=0;for(index;index<_tcslen(szWork);index++){if(szBuf[index]=='='){keyValue=&szWork[index+1];//单独取出健值break;}}}}
- Visual Studio 2010读写ini文件(1)读出ini文件所有键名、节名、键值
- ini文件读写模块(可以穷举一个ini文件里的所有段名和指定段的键名/键值)
- ini文件读取节点下所有键名和键值。
- 获取.ini文件中节名、键名、键值
- 将ini文件内容读出
- VC++获得INI文件指定段的全部键名和键值
- C#读写INI文件
- INI文件的读写
- C#读写INI文件
- C#读写INI文件
- C#读写INI文件
- 读写INI文件
- 如何读写INI 文件
- 读写INI文件
- INI文件读写
- 读写Ini文件
- INI文件的读写
- 读写INI文件
- JavaScript获取DOM元素的方法总结
- C++标准转换运算符const_cast
- ubuntu常用功能安装集锦
- 机器学习_谱聚类
- BZOJ2829: 信用卡凸包(圆的凸包)
- Visual Studio 2010读写ini文件(1)读出ini文件所有键名、节名、键值
- C++ tuple 元组合并与排序
- golang基础-网络请求WithTimeout、上下文withValue、withCancel、WithDeadline
- 深度学习基础总结
- 请求数据版购物车
- 在移动和PC自适应页面做视频弹窗控制小案例
- NuGet Package Explorer上传时报:failed to process request:'Method Not Allowed'错误解决办法
- 基于IntelliJ IDEA打包JavaFX
- C++信息学奥赛一本通题库1035 等差数列末项计算