Visual c++ WinCE 6.0读取ini文件

Visual c++ WinCE 6.0读取ini文件,visual-c++,windows-ce,Visual C++,Windows Ce,这可能是一个哲学问题,但我正在审阅一位以前的工程师编写的代码,我想知道什么时候阅读ini文件是最好的时机。当前应用程序每次需要值时都会重新读取ini文件,每次更改时都会写入数据。在我看来,一个更好的解决办法是读/写一次并将信息存储在内存中。我错过什么了吗?ini文件中大约有40个条目 工程师也创建了自己的类,难道没有一个现有的类来完成这个任务吗?您可以使用库来读写INI文件 以下是读取INI文件、修改并将其保存回的示例代码: #include <iostream> #include

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

工程师也创建了自己的类,难道没有一个现有的类来完成这个任务吗?

您可以使用库来读写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;
}
#包括
#包括
#包括
#包括
/*
[业主]
姓名=无名氏
组织=Acme Widgets公司。
*/
int main(int ac,char*av[])
{
boost::property_tree::ptree pt;
//阅读
读取ini(“data.ini”,pt);

std::cout默认情况下,我会在启动时读取一次配置,我不仅会在CE上这样做,而且会在任何其他系统上这样做。如果我希望能够对配置中的更改做出反应,我更喜欢显式地重新加载,例如向程序发送信号。如果CE下没有信号,则可以使用命名事件或询问用户是否需要有一个UI。如果没有这些,我会定期检查文件的时间戳,并在更改时重新加载文件,但仍然在内存中保留一个副本

不为单个值打开-读取-关闭文件的原因是,有时两个值有依赖关系,如果这样做,可能会将旧值和新值放入内存,从而导致不一致。此外,在实际开始使用之前,我会验证配置的合理性。也就是说,访问hard磁盘仅用于读取单个配置值

关于更改的编写,我会在用户明确请求时或在接受更改后自动完成。尽管如此,我还是会尽量避免编写单个值,原因与不读取单个值相同

最后,INI文件已声明为过时文件,因此CE不支持用于读取和写入这些文件的win32 API。这解释了为什么有人使用自己的类来读取和写入这些文件。MS希望您改用注册表,因为该注册表提供并支持API。我不太同意MS的观点,因为文本配置on文件(不是必需的INI文件)提供了一些注册表不具备的功能,例如,使用现有文本工具的能力。

为了获取标题,您还可以切换到STLport,它支持CE5和6(在某种程度上甚至更早的版本)。