【问题标题】:How to write changes to ".ini" file using POCO libraries?如何使用 POCO 库将更改写入“.ini”文件?
【发布时间】:2012-10-15 09:48:48
【问题描述】:

我正在尝试使用 Poco::Util::IniFileConfiguration 更改“.ini”文件。我有以下示例 ini 文件:

[Test]
IP = 192.168.1.1

我希望能够将新 IP 写入文件。到目前为止我所拥有的是:

#include "Poco/Util/IniFileConfiguration.h"
#include <iostream>

int main( int argc, char *argv[] ) {
  Poco::AutoPtr<Poco::Util::IniFileConfiguration> pConf( new Poco::Util::IniFileConfiguration( "file.ini" ) );
  if ( pConf->has( "Test.IP" ) ) {
    try {
      std::cout << pConf->getString( "Test.IP" ) << std::endl;
      pConf->setString( "Test.IP", "127.0.0.1" );
      std::cout << pConf->getString( "Test.IP" ) << std::endl;
      // TODO Make changes permanent; write to file!
    } catch ( Poco::SyntaxException& e ) {
      std::cerr << "writeValue: " << e.displayText() << std::endl;
      return -1;
    }
  }
  return 0;
}

此代码打印以下内容:

192.168.1.1
127.0.0.1

IP 在运行时更改,但不会将更改写入磁盘(file.ini 未更改)。有没有简单的方法来实现这一目标?

谢谢!

【问题讨论】:

    标签: c++ ini poco-libraries


    【解决方案1】:

    这很奇怪,但目前 Poco IniConfigurationFile 是只读的,无法保存。 Proof on this presentation.

    因此,如果您想使用 ini 文件,您需要编写自己的实现来保存 PocoIniConfiguration 或使用其他库。

    【讨论】:

    • 嗯,我就是这么想的;那我得再找一个图书馆了,谢谢!
    【解决方案2】:
    class CIniConfig : public Poco::Util::IniFileConfiguration
    {
    //  using namespace Poco::Util;
    public :
        CIniConfig();
        using Poco::Util::IniFileConfiguration::IniFileConfiguration;
    
    bool SaveConfig()
    {
    std::string key ;
        Keys range ;
        //If an empty key is passed, all root level keys are returned.
        enumerate(key,range);
        if(range.empty())
            return false ;
        using namespace std ;
        std::wofstream out;
        out.open(L"config.ini",std::ios_base::out|std::ios_base::trunc);
        if(!out.is_open())
            return false;
        for(auto item : range)
        {
    
            string pair = item ;
            pair.append("=");
            pair.append(getString(item));
            std::wstring result(pair.begin(),pair.end());
            out << result << endl;
        }
        out.flush();
        out.close();
        return true;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-31
      • 1970-01-01
      • 2013-03-16
      • 2011-08-07
      • 2017-03-07
      • 2013-06-14
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多