C++操作配置文件用到的一些方法

来源:互联网 发布:kuka机器人编程 编辑:程序博客网 时间:2024/05/16 15:03

删除配置文件中某一行

WritePrivateProfileString(段名, 键名, NULL, 文件路径);
如:

[水果]

苹果 = 1

香蕉 = 2

橘子 = 3

<pre name="code" class="cpp">WritePrivateProfileString(_T("水果"),_T("橘子"), NULL, 文件路径);

结果就是橘子这一行被删除。

在文件操作中经常用到的几个函数:

 CString::Find

在一个较大的字符串中查找字符或子字符串 ,返回此CString对象中匹配到的第一个字符从0开始的索引;如果没有找到子字符串或字符则返回-1。

如:

CString str = abcdef;int n = str.Find('d');//结果n = 3;

CString::Left(intnCount)

——返回字符串前nCount个字符的字符串

CString::Right(int nCount)

——返回字符串后nCount个字符的字符串

 CString a,b;
 a = "123456789";

 b = a.Left(4);   //值为:1234
 b = a.Mid(3);    //值为:456789
 b = a.Mid(2, 4); //值为:3456
 b = a.Right(4);  //值为:6789

//读取配置文件全部段名方法1/*统计共有多少个节  节名的分离方法:若chSectionNames数组的第一字符是'\0'字符,则表明 有0个节。否则,从chSectionNames数组的第一个字符开始,顺序往后找, 直到找到一个'\0'字符,若该字符的后继字符不是 '\0'字符,则表明前面的字符组成一个节名。若连续找到两个'\0'字符,则统计结束*/int CTestDlg::CalcCount(void){TCHAR      chSectionNames[2048] = { 0 };      //所有节名组成的字符数组 char * pSectionName; //保存找到的某个节名字符串的首地址int i;      //i指向数组chSectionNames的某个位置,从0开始,顺序后移int j = 0;     //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量  int count = 0;     //统计节的个数   ::GetPrivateProfileSectionNames(chSectionNames, 2048, ".\\ex1.ini");for (i = 0; i<2048; i++, j++){if (chSectionNames[0] == '\0')break;      //如果第一个字符就是0,则说明ini中一个节也没有      if (chSectionNames[i] == '\0'){pSectionName = &chSectionNames[i - j]; //找到一个0,则说明从这个字符往前,减掉j个偏移量,就是一个节名的首地址        j = -1;        //找到一个节名后,j的值要还原,以统计下一个节名地址的偏移量赋成-1是因为节名字符串的最后一个字符0是终止符,不能作为节名的一部分          AfxMessageBox(pSectionName);     //把找到的显示出来 if (chSectionNames[i + 1] == 0){break;     //当两个相邻的字符都是0时,则所有的节名都已找到,循环终止 }}}return count;}///////////////////////////////////////////////////////////////////////////////////////////////////////读取配置文件全部段名方法2int CIni::GetSections(CStringArray& arrSection){/*本函数基础:GetPrivateProfileSectionNames - 从 ini 文件中获得 Section 的名称如果 ini 中有两个 Section: [sec1] 和 [sec2],则返回的是 'sec1',0,'sec2',0,0 ,当你不知道 ini 中有哪些 section 的时候可以用这个 api 来获取名称 */    int i;     int iPos=0;     int iMaxCount;    TCHAR chSectionNames[MAX_ALLSECTIONS]={0}; //总的提出来的字符串    TCHAR chSection[MAX_SECTION]={0}; //存放一个段名。    GetPrivateProfileSectionNames(chSectionNames,MAX_ALLSECTIONS,m_strFileName);    //以下循环,截断到两个连续的0    for(i=0;i<MAX_ALLSECTIONS;i++){        if (chSectionNames[i]==0)        if (chSectionNames[i]==chSectionNames[i+1])        break;}    iMaxCount=i+1; //要多一个0号元素。即找出全部字符串的结束部分。    //arrSection.RemoveAll();//清空原数组    for(i=0;i<iMaxCount;i++){        chSection[iPos++]=chSectionNames[i];        if(chSectionNames[i]==0){             arrSection.Add(chSection);            memset(chSection,0,i);            iPos=0;}}    return (int)arrSection.GetSize();}



0 0