2008-09-28 11 views

Répondre

2

Ce que je suis venu avec:

std::wifstream file(L"\\Windows\\myini.ini"); 
if (file) 
{ 
    bool section=false; 
    while (!file.eof()) 
    { 
    WCHAR _line[256]; 
    file.getline(_line, ELEMENTS(_line)); 
    std::wstringstream lineStm(_line); 
    std::wstring &line=lineStm.str(); 
    if (line.empty()) continue; 

    switch (line[0]) 
    { 
     // new header 
     case L'[': 
     { 
     std::wstring header; 
     for (size_t i=1; i<line.length(); i++) 
     { 
      if (line[i]!=L']') 
      header.push_back(line[i]); 
      else 
      break; 
     } 
     if (header==L"Section") 
      section=true; 
     else 
      section=false; 
     } 
    break; 
     // comments 
     case ';': 
     case ' ': 
     case '#': 
     break; 
     // var=value 
     default: 
     { 
     if (!section) continue; 

     std::wstring name, dummy, value; 
     lineStm >> name >> dummy; 
     ws(lineStm); 
     WCHAR _value[256]; 
     lineStm.getline(_value, ELEMENTS(_value)); 
     value=_value; 
     } 
    } 
    } 
} 
2

Vous devriez jeter un oeil à Boost.Program_options. Il a une fonction parse_config_file qui remplit une carte de variables. Juste ce dont vous avez besoin!

Questions connexes