关于GetPrivateProfileSection函数读INI文件时的问题

thinkboy234 2010-07-13 10:31:48
INI文件内容如下 :
[navigation]
12=2
44444=444
666=888

char strCurrent[256];
CString strFilePath;
char strNavi[256];
strFilePath=GetCurrentDirectory(256,strCurrent); //获得当前路径
strFilePath.Format("%s\\navigation.ini",strCurrent);
GetPrivateProfileSection("navigation",strNavi,256,strFilePath);

但是我这样读取的话得到的却只是第一行的 12=2 我该怎么把所有的键名和键值都读取到呢。

CString aaaa;
aaaa.Format("%s",strNavi);
AfxMessageBox(aaaa);
我是这样测试知道值的。
...全文
746 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thinkboy234 2012-07-17
  • 打赏
  • 举报
回复
时隔多年的帖子居然还有人回复。其实是可以获取到的,只不过是有“\0”作为了分隔符,比如:11\022\033 而在数组中是把'\0'作为结尾标识符的。你可以一个字符一个字符的都读出来看下。

[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:
C/C++ code

#define MAX_COUNT 256
TCHAR strCurrent[MAX_COUNT] = {0};
CString strFilePath(_T(""));
TCHAR strNavi[MAX_COUNT] ={0};
strFilePath = GetCurrentDirectory(MAX_COUNT, strCu……
[/Quote]
nbzsg2011 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
C/C++ code

#define MAX_COUNT 256
TCHAR strCurrent[MAX_COUNT] = {0};
CString strFilePath(_T(""));
TCHAR strNavi[MAX_COUNT] ={0};
strFilePath = GetCurrentDirectory(MAX_COUNT, strCurren……
[/Quote]


我刚才测试了 还是不可以获取键的所有名称
thinkboy234 2010-07-13
  • 打赏
  • 举报
回复
用3楼的方法 调试了下所有的键名和键值都独到了。

这样的话,那么strNavi数组中的值就应该是已经全部读取到了。

那么就是我测试的代码那遇到空字符串做为结束符了。

那是aaaa.Format("%s",strNavi);的原因还是AfxMessageBox(aaaa);的原因呢。
thinkboy234 2010-07-13
  • 打赏
  • 举报
回复
DWORD GetPrivateProfileSection(
LPCTSTR lpAppName, // section name
LPTSTR lpReturnedString, // return buffer
DWORD nSize, // size of return buffer
LPCTSTR lpFileName // initialization file name
);

对于lpFileName 要给出路径,相对路径也行,不能只给出个文件名。
函数将所有的key和key value一如下形式返回到lpReturnedString所指的缓冲中:
key1=value1@key2=value2@....

@表示NULL


网上有这么个解释,按理来说我得到的应该就是12=2 44444=444 666=888 才对。是不是中间那个空格起到了结束符的作用?但是看了MSDN上说GetPrivateProfileSection函数是把空格也读取到的数组里的。所以更郁闷。

Eleven 2010-07-13
  • 打赏
  • 举报
回复 1

#define MAX_COUNT 256
TCHAR strCurrent[MAX_COUNT] = {0};
CString strFilePath(_T(""));
TCHAR strNavi[MAX_COUNT] ={0};
strFilePath = GetCurrentDirectory(MAX_COUNT, strCurrent); //»ñµÃµ±Ç°Â·¾¶
strFilePath.Format(_T("%s\\navigation.ini"), strCurrent);
DWORD dwSize = GetPrivateProfileSection(_T("navigation"),strNavi,MAX_COUNT,strFilePath);
LPTSTR szText = strNavi;
while(_T('\0') != *szText)
{
AfxMessageBox(szText);
szText = _tcschr(szText, _T('\0'));
szText++;
}
thinkboy234 2010-07-13
  • 打赏
  • 举报
回复
char strCurrent[256] = {""};
是要这样么?
刚试了还是只读取第一行的12=2
healer_kx 2010-07-13
  • 打赏
  • 举报
回复
char strCurrent[256];

===>

char strCurrent[256] = {};

都这么处理一下。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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