2

我正在使用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

我的代码有什么问题?

4

2 回答 2

4

我强烈建议您在 Michael Kaplan 的博客上阅读您的问题。

如果您绝对必须使用 INI 文件,请不要使用您现在正在使用的已弃用的 Win32 API 函数。它们是错误的,并且错误肯定不会再得到修复,因为它们现在已被弃用

而是使用SimpleIni一个非常体面的 C++ 的 INI 读取器/写入器的跨平台实现。

微软(作为一个整体)似乎不确定他们是否更喜欢注册表或其他存储配置数据的机制。在某些时候,它是 INI 文件,然后是注册表(对我来说是一种优越的机制),然后它似乎转向 XML 和其他基于文件的存储机制。当然,您的用例将定义您需要什么,但请考虑使用这些已弃用函数的所有注意事项,并至少寻找一种使用 INI 文件的替代机制(如果必须)

于 2012-07-12T12:31:54.860 回答
2

好吧,这不是 API 函数的 INI 文件的正确格式,您期望什么?

ini 文件的格式为:

[section]
item1=item1text
item2=item2text
...

[anothersection]
item1=item1text
item2=item2text
...

如果要使用 ini API 调用,则必须遵守格式。您希望城市、街道和房屋成为城市项目的一部分吗?然后将它们全部放在“同一行”并使用一个分隔符,您可以稍后为每个字段解析。您可以使用逗号、竖线或其他任何不属于文本的内容。

于 2012-07-12T23:46:42.527 回答