2012-10-15 68 views
1

我試圖使用Poco :: Util :: IniFileConfiguration對「.ini」文件進行更改。我下面舉個例子INI文件如何使用POCO庫將更改寫入「.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沒有改變)。有沒有簡單的方法來實現這一目標?

謝謝!

回答

1

這很奇怪,但目前Poco IniConfigurationFile是隻讀的,不能保存。 Proof on this presentation

所以,如果你想使用ini文件,你需要編寫自己的實現來保存PocoIniConfiguration或使用其他庫。

+0

嗯,這就是我想的;那我得去找另一個圖書館,謝謝! – pparescasellas

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