WinCE 6.0读取ini文件

时间:2013-03-04 21:23:57

标签: visual-c++ windows-ce

这可能是一种哲学上的问题,但我正在审查前任工程师的代码,并且想知道何时最好的时间是阅读ini文件。当前应用程序每次需要值时都会重新读取ini文件,并在每次更改时写入数据。在我看来,更好的解决方案是读/写一次并将信息存储在内存中。我错过了什么吗? ini文件中有大约40个条目。

同样,工程师自己上课,是不是现有的课程来完成这个?

2 个答案:

答案 0 :(得分:1)

默认情况下,我会在启动时读取配置一次,我不仅在CE上,而且在任何其他系统上也这样做。如果我希望能够对配置中的更改做出反应,我宁愿重新加载以明确,例如向程序发送信号。在CE下缺少信号,您可以使用命名事件或询问用户是否有UI。缺乏这一切,我会定期检查文件的时间戳,并在更改时重新加载文件,但仍保留一份内存。

没有为单个值打开 - 读取 - 关闭文件的原因是有时两个值具有依赖性,如果这样做,您可能会将旧值和新值存入内存,从而导致不一致。另外,在实际开始使用它之前,我会验证配置是否合理。也就是说,访问硬盘只是为了读取单个配置值也是非常低效的。

关于更改的写入,我会根据用户的明确请求或在接受更改后自动执行此操作。尽管如此,我仍然试图避免写单值,原因与不读单值相同。

最后,INI文件已被声明为过时,因此CE不支持用于读取和写入它们的win32 API。这解释了为什么有人推出自己的类来读写这些文件。 MS希望您使用注册表,而API的存在和支持​​。我在这里并不真正同意MS,因为文本配置文件(不是必需的INI文件)提供了注册表没有的一些功能,例如,能够使用现有的文本工具。

答案 1 :(得分:0)

您可以使用Boost.PropertyTree库来读取和写入INI文件。

以下是读取INI文件的示例代码,修改并保存回来:

#include <iostream>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>

/*
[owner]
name=John Doe
organization=Acme Widgets Inc.
*/

int main(int ac, char* av[])
{
    boost::property_tree::ptree pt;

    // Read
    read_ini("data.ini", pt);
    std::cout << pt.get<std::string>("owner.name") << std::endl; // John Doe
    std::cout << pt.get<std::string>("owner.organization") << std::endl; // Acme Widgets Inc.

    // Write
    pt.put<std::string>("owner.name", "New Name");
    pt.put<std::string>("owner.name", "New Organization");
    write_ini("date2.ini", pt);

    return 0;
}

注意:在Windows CE上编译此代码时,可能需要调整Boost.PropertyTree库。似乎用于Windows CE的标准C ++库没有<locale>标头,Boost.PropertyTree在读取和写入INI文件时使用它。