WritePrivateProfileString未将属性添加到末尾

WritePrivateProfileString is not adding property to the end

本文关键字:添加 属性 WritePrivateProfileString      更新时间:2023-10-16

我正在使用WritePrivateProfileString函数在ini文件中编写一些属性,一切都很好,但当我添加多行文本时,会出现问题。

这是代码和输出。

WritePrivateProfileString(_T("General"), _T("Name"), OLE2CT(text), FilePath);

输出:

[General]
Name=mytext

text = addressnstreetnhouse
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

我的代码有什么问题?

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

如果您必须使用INI文件,请不要使用您目前正在使用的不推荐使用的Win32 API函数。它们是有缺陷的,肯定不会再被修复了,因为它们现在已经被弃用了。

相反,使用SimpleIni,这是C++的INI读写器的一个非常不错的跨平台实现。

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

很明显,这不是API函数的INI文件的正确格式,您期待什么?

ini文件的格式为:

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

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