Как прочитать файл INI entirley? - PullRequest
1 голос
/ 07 апреля 2019

Я хочу полностью прочесть INI-файл, для этого я использую класс wxFileConfig, но большинство примеров в Интернете - просто чтение и запись только элемента, а не всего INI-файла.

Данные в INI-файле похожи на следующие:

[sdl]
fullresolution=0x0
fullscreen=true
output=opengl
autolock=false

[dosbox]
machine=svga_s3
memsize=16

[render]
frameskip=0
aspect=false
scaler=normal2x

[cpu]
core=normal
cputype=auto
cycles=10000
cycleup=1000
cycledown=1000
.....

Я пытался что-то сделать, но он просто читает заголовки ([sdl], [dosbox], [render], ...).

wxFileConfig config(wxEmptyString, wxEmptyString, wxEmptyString, wxGetCwd() + "\\dosbox.conf");
wxString str;
long idx;
bool bCont = config.GetFirstGroup(str, idx);
while (bCont) {
    bCont = config.GetNextGroup(str, idx);
    debugMsg("%s", str);
}

Как читать каждый заголовок с его элементами?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Взято из документации , вы можете прочитать все записи примерно так:

// enumeration variables
wxString str;
long dummy;

// first enum all entries
bool bCont = config->GetFirstEntry(str, dummy);
while ( bCont ) {
    aNames.Add(str);
    bCont = config->GetNextEntry(str, dummy);
}

Это очень похоже на код, который вы должны прочитать для всех групп.

0 голосов
/ 08 апреля 2019

Я нашел полный код, который приносит все данные из файла .ini:

wxFileConfig config(wxEmptyString, wxEmptyString, wxEmptyString, wxGetCwd() + "\\dosbox.conf");
wxString group;
long group_index;

config.SetPath("/");
bool has_group = config.GetFirstGroup(group, group_index);
while (has_group) {
    config.SetPath(group);

    wxString entry;
    long entry_index;

    bool has_entry = config.GetFirstEntry(entry, entry_index);
    while (has_entry) {
        wxString value = config.Read(entry, "");
        wxMessageOutputDebug d;
        d.Printf("[%s] %s = %s", group, entry, value);

        has_entry = config.GetNextEntry(entry, entry_index);
    }

    config.SetPath("/");
    has_group = config.GetNextGroup(group, group_index);
}

Источник .

...