Как записать изменения в & quot; .ini & quot; файл с использованием библиотек POCO?

Я пытаюсь внести изменения в файл «.ini», используя Poco :: Util :: IniFileConfiguration. У меня есть следующий пример ини файл:

[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 не изменяется). Есть ли простой способ добиться этого?

Спасибо!

1

Решение

Это было странно, но в настоящее время Poco IniConfigurationFile доступен только для чтения и не может быть сохранен. Доказательство этой презентации.

Итак, если вы хотите работать с ini-файлами, вам нужно написать собственную реализацию для сохранения PocoIniConfiguration или использовать другую библиотеку.

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;
}
}
0

По вопросам рекламы [email protected]