GetPrivateProfileSectionNames使用问题?

w20011025 2009-08-16 12:06:06
test.ini内容如下

[ITEM0]
content=0

[ITEM1]
content=1

[ITEM2]
content=2

[ITEM3]
content=3

如果我从第二项读出内容如下:
2
3
4
请问如何读取?????
在添加内容如下:只读取添加后的数据
[ITEM4]
content=4

[ITEM5]
content=5

[ITEM6]
content=6
结果:
4
5
6
请问如何设置从指定位置循环读取数据?
谢谢。
...全文
715 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
猞猁狲 2009-08-16
  • 打赏
  • 举报
回复

GetPrivateProfileString 用这个读不行吗?
CString strItem;
int i = 0;
strItem.Format(L"ITEM%d",i);

CString strValue;
GetPrivateProfileString(strItem,L"content",strValue.GetBuffer(),30,strIniFilePath);
MoXiaoRab 2009-08-16
  • 打赏
  • 举报
回复
第一问...

DWORD WINAPI GetPrivateProfileString(
__in LPCTSTR lpAppName,
__in LPCTSTR lpKeyName,
__in LPCTSTR lpDefault,
__out LPTSTR lpReturnedString,
__in DWORD nSize,
__in LPCTSTR lpFileName
);

然后自己把=前面的去掉

第二问:
还不如用CStidoFile读取以前的那个,把内容保存下来,以后更新后和以前的内容进行比对后再读取
w20011025 2009-08-16
  • 打赏
  • 举报
回复
谢谢。等下我开新贴,欢迎再次光临。
MoXiaoRab 2009-08-16
  • 打赏
  • 举报
回复
差不多就这样了。
w20011025 2009-08-16
  • 打赏
  • 举报
回复
config.ini内容如下,循环读取新增加的内容[ITEM0]
//下次从新增加开始读取
start=6
body=AAAAAAAA

[ITEM1]
body=11111111

[ITEM2]
body=22222222

[ITEM3]
body=33333333

[ITEM10]
body=hh

[ITEM11]
body=gg
代码如下:
#include<stdio.h>
#include <stdlib.h>
#include<windows.h>
int main()
{
char inifilepath[100]="\\config.ini";
char chSectionNames[2048]; //所有节名组成的字符数组
char * pSectionName; //保存找到的某个节名字符串的首地址
int i; //i指向数组chSectionNames的某个位置,从0开始,顺序后移
int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量
int count=0; //统计节的个数
char body[50],start[8];
int k=0;
::GetPrivateProfileSectionNames(chSectionNames,2048,inifilepath);
GetPrivateProfileString("ITEM0","start","",start,8,inifilepath);
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是终止符,不能作为节名的一部分
++k;
++count;
if(k<=atol(start)) { goto end; }
// printf("%s\n",pSectionName);
GetPrivateProfileString(pSectionName,"body","",body,50,inifilepath);
printf("%s\n",body);
end:
if(chSectionNames[i+1]==0)
{
break; //当两个相邻的字符都是0时,则所有的节名都已找到,循环终止
}

}

}
_itoa(count,start,10);
WritePrivateProfileString("ITEM0","start",start,inifilepath);
return 0;
}

有点复杂的,看看有简单点没?
w20011025 2009-08-16
  • 打赏
  • 举报
回复
你说说如何保存,等下把我的做出来给你看下。有点复杂。
MoXiaoRab 2009-08-16
  • 打赏
  • 举报
回复
用CStidoFile读取以前的那个,把内容保存下来,以后更新后和以前的内容进行比对后再读取

说得清清楚楚
w20011025 2009-08-16
  • 打赏
  • 举报
回复
是每次读取新增加的所有项,如下
[ITEM4]
content=4

[ITEM5]
content=5

[ITEM6]
content=6
结果:
4
5
6
MoXiaoRab 2009-08-16
  • 打赏
  • 举报
回复
既然能读所有的,加个if判断不就好了
w20011025 2009-08-16
  • 打赏
  • 举报
回复
LS两位理解错误?
我的意思是 从第二项开始读取接点下的数据一直到所有项结束?

如果第二十项开始读取接点下的数据一直到所有项结束?

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧