1

我正在尝试使用 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 未更改)。有没有简单的方法来实现这一目标?

谢谢!

4

2 回答 2

2

这很奇怪,但目前 Poco IniConfigurationFile 是只读的,无法保存。此演示文稿的证明

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

于 2012-10-16T07:24:28.163 回答
1
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;
}
}
于 2018-02-16T07:08:43.607 回答