我正在使用WritePrivateProfileString
函数在ini文件中编写一些属性,一切正常,但是当我添加多行文本时,就会出现问题。
这是代码和输出。
WritePrivateProfileString(_T("General"), _T("Name"), OLE2CT(text), FilePath);
输出:
[General]
Name=mytext
.
text = address\nstreet\nhouse
WritePrivateProfileString(_T("General"), _T("Address"), OLE2CT(text), FilePath);
输出:
[General]
Name=mytext
Address=address
street
house
但是当我添加一个多行项目后,我添加了另一个项目,而不是添加它来结束它在地址行之后添加新行
text = city
WritePrivateProfileString(_T("General"), _T("City"), OLE2CT(text), FilePath);
输出:
[General]
Name=mytext
Address=address
City=city
street
house
但输出应该是
[General]
Name=mytext
Address=address
street
house
City=city
我的代码有什么问题?
我强烈建议你阅读你的问题on Michael Kaplan's blog。
如果您必须使用INI文件,请不要使用您现在使用的已弃用的Win32 API函数。它们是越野车,并且肯定不会再被修复为they are deprecated了。
相反,使用SimpleIni是一个非常适合C ++的INI读/写器的跨平台实现。
微软(作为一个整体)似乎不确定他们是否更喜欢使用注册表或其他机制来存储配置数据。在某些时候它是INI文件,然后它是注册表(对我来说是一个优越的机制)然后它似乎转向XML和其他基于文件的存储机制。当然,您的用例将定义您需要的内容,但请考虑使用这些已弃用的函数的所有注意事项,并至少考虑使用INI文件的替代机制(如果必须)。
很好地看到这不是API函数的INI文件的正确格式,您期望什么?
ini文件的格式为:
[section]
item1=item1text
item2=item2text
...
[anothersection]
item1=item1text
item2=item2text
...
如果要使用ini API调用,则必须遵循该格式。您希望城市,街道和房屋成为City项目的一部分吗?然后将它们全部放在“同一行”上,并使用一个分隔符,稍后您可以为每个字段解析它。您可以使用逗号,管道或其他任何不属于文本的内容。