我正在尝试使用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未更改)。有没有一种简单的方法来实现这一目标?
谢谢!
答案 0 :(得分:1)
这很奇怪,但目前Poco IniConfigurationFile是readonly,无法保存。 Proof on this presentation
因此,如果你想使用ini文件,你需要编写自己的实现来保存PocoIniConfiguration或使用另一个库。
答案 1 :(得分:0)
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;
}
}