【问题标题】:WritePrivateProfileString is not adding property to the endWritePrivateProfileString 未将属性添加到末尾
【发布时间】:2012-07-12 04:36:17
【问题描述】:

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

我的代码有什么问题?

【问题讨论】:

  • 它们不支持多行项目。当您尝试阅读它时,您会看到它,

标签: c++ winapi writefile


【解决方案1】:

我强烈建议您阅读您的问题on Michael Kaplan's blog

如果您必须使用 INI 文件,请不要使用您现在正在使用的已弃用的 Win32 API 函数。它们是错误的,现在肯定不会再像 they are deprecated 那样修复错误了。

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

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

【讨论】:

  • 我正在处理非常旧的代码,这个函数有很多调用,通过去别的东西需要更多的努力,没有任何其他解决方案,比如通过使用这个新项目添加到结束而不是下一行的最后一项,
  • @Faisal Hafeez:我自己编写了很多非常古老的代码。在这种情况下,我大部分时间都在做的是编写一个适配器函数并使用预处理器的功能将代码变形为我想要的形状。在这里,您可以基于 SimpleIni 编写您自己的 WritePrivateProfileString 版本(尽管将其命名为其他名称),然后使用 #define 将您的代码全局指向您的函数。您可能需要重新定义WritePrivateProfileString之前,然后再次之后,包括windows.h,以防止冲突。
  • 恐怕我做不到,
  • @Faisal Hafeez:好吧,恐怕你自己一个人。这些功能的问题在于它们已被放弃。它们仍然存在的唯一原因是为了向后兼容,并且它们比其他一些已弃用的 API 在未来更有可能淘汰。原因是这些函数已被滥用为获取 INI 解析的简单途径,尽管它们最初并非用于此目的。对不起,但你是一个人。我坚持我的回答。
  • 我正在寻找这个项目 (Simpleini) 的 c# 包装器。有人吗? :D
【解决方案2】:

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

ini文件的格式为:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2013-02-14
    相关资源
    最近更新 更多