*.ini ende bestimmen



  • Hallo,
    ich habe ein file "test.ini" welches wie folgt aufgebaut ist:
    [info]
    thema=gemüse
    [eintrag1]
    frage=käse
    antwort=gelb
    [eintrag2]
    frage=gurke
    antwort=grün
    [eintrag3]
    ...usw.

    hat jmd ne idee, wie man herausfinden kann, wie viele "sektionen" in der datei sind? bzw. wie man herausfinden kann wie der letzte eintrag heißt?
    Ich benötige sie um neue einträge, nach dem letzten eintrag anzulegen.

    WritePrivateProfileString(eintrag,"Antwort",antwortText,str);
    

    MfG Lukas



  • If lpAppName is NULL, GetPrivateProfileString copies all section names in the specified file to the supplied buffer.



  • hm ja das hab ich auch schon gelesen ... aber i-wie klappt das bei mir nicht

    char puffer[1000];
    GetPrivateProfileString(NULL,NULL,NULL,buffer,sizeof(buffer),str);
    MessageBox( NULL, buffer ,"werte in puffer", MB_OK);
    

    in puffer wird nur "eintrag" gespeichert ... eintrag1,2,3,usw aber nicht

    MfG Lukas



  • Der String den du zurückbekommst sieht so aus:

    eintrag1\0eintrag2\0\eintrag3\0\0

    Beim ersten \0-Zeichen hört MessageBox auf den String auszugeben. (wie alle Stringfunktionen die keine Länge übergeben bekommen)

    Du müsstest dir also eine Schleife programmieren...



  • irgendwie bekommichs net hin ...
    habs mit:
    p1 = buffer;
    p2 = strchr (p1, '\0');
    versucht ... aber es klappt i-wie nicht ... könntest du mir bitte ein beispiel zeigen?
    MfG Lukas



  • TCHAR* pBuffer = buffer;
    
    int length;
    while((length = lstrlen(pBuffer)) != 0)
    {
        MessageBox(NULL, pBuffer, NULL, MB_OK);
        pBuffer += length + 1;
    }
    


  • vielleicht kann
    seekg/seekp
    helfen.
    Am Ende anfangen und anschauen, ob ein "]" vorhanden ist. Ansonsten weiter verschieben.
    Dann hast du den letzten Eintrag.



  • ok gelöst
    danke


Log in to reply