2012-10-15 3 views
1

Poco :: Util :: IniFileConfiguration을 사용하여 ".ini"파일을 변경하려고합니다. 내가 파일에 새로운 IP를 쓸 수 있도록하려면POCO 라이브러리를 사용하여 ".ini"파일에 변경 사항을 쓰는 방법은 무엇입니까?

[Test] 
IP = 192.168.1.1 

: 나는 다음과 같은 예를 INI 파일이 있습니다. 내가 지금까지있는 것은 :

192.168.1.1 
127.0.0.1 

을 IP 런타임에 변경하지만 디스크에 변경 사항을 (기록하지 않습니다 file.ini이 변경되지 않습니다

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

이 코드는 다음을 출력한다). 이것을 달성하기위한 쉬운 방법이 있습니까?

감사합니다.

답변

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; 
} 
} 
관련 문제