关于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);
我是这样测试知道值的。
...全文
798 7 打赏 收藏 转发到动态 举报
写回复
用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] = {};

都这么处理一下。
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

65,211

社区成员

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

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