Avatar billede kjeldsted Novice
25. april 2009 - 21:56 Der er 13 kommentarer og
1 løsning

Læse .ini fil i C++

Hej.

Jeg ønsker at læse indholdet af en .ini fil, hvor jeg selvfølgelig gerne vil gemme de enkelte værdier seperat. Altså hvis jeg fx. har en .ini fil med:

NUM_ROWS = 5
NUM_HUL = 23
SK5 = true
SK6 = false

Vil jeg jo så gerne have en streng med værdien fra hhv. NUM_ROWS, NUM_HUL, SK5 og SK6.

Hvordan kan jeg gøre dette mest simpelt?

På forhånd tak.
Avatar billede arne_v Ekspert
25. april 2009 - 23:28 #1
Du skal bruge GetPrivateProfileString og GetPrivateProfileInt.

Jeg kan prøve at bixe et eksempel.
Avatar billede kjeldsted Novice
25. april 2009 - 23:31 #2
Det ville være super, hvis du kunne bixe et eksempel.
Avatar billede arne_v Ekspert
25. april 2009 - 23:47 #3
demo.ini
--------

[Demo]
NUM_ROWS = 5
NUM_HUL = 23
SK5 = true
SK6 = false

demo.cpp
--------

#include <iostream>

using namespace std;

#include <windows.h>

int main()
{
    cout << GetPrivateProfileInt("Demo", "NUM_ROWS", 1, "C:\\demo.ini") << endl;
    cout << GetPrivateProfileInt("Demo", "NUM_HUL", 1, "C:\\demo.ini") << endl;
    char buf[100];
    GetPrivateProfileString("Demo", "SK5", "*", buf, sizeof(buf), "C:\\demo.ini");
    cout << buf << endl;
    GetPrivateProfileString("Demo", "SK6", "*", buf, sizeof(buf), "C:\\demo.ini");
    cout << buf << endl;
    return 0;
}
Avatar billede arne_v Ekspert
25. april 2009 - 23:48 #4
Koden bliver lidt mere tricky hvis du bruger UNICODE !
Avatar billede kjeldsted Novice
25. april 2009 - 23:56 #5
Well... Jeg får fejlen:

.\test890000.cpp(11) : error C2664: 'GetPrivateProfileIntW' : cannot convert parameter 1 from 'const char [5]' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Avatar billede arne_v Ekspert
26. april 2009 - 00:22 #6
Så bruger du unicode ....

Jeg kigger på det.
Avatar billede arne_v Ekspert
26. april 2009 - 00:30 #7
#include <iostream>

using namespace std;

#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>

int main()
{
    cout << GetPrivateProfileInt(_T("Demo"), _T("NUM_ROWS"), 1, _T("C:\\demo.inI")) << endl;
    cout << GetPrivateProfileInt(_T("Demo"), _T("NUM_HUL"), 1, _T("C:\\demo.inI")) << endl;
    TCHAR buf[100];
    char buf2[100];
    GetPrivateProfileString(_T("Demo"), _T("SK5"), _T("*"), buf, sizeof(buf)/sizeof(TCHAR), _T("C:\\demo.inI"));
    wcstombs(buf2, buf, sizeof(buf2));
    cout << buf2 << endl;
    GetPrivateProfileString(_T("Demo"), _T("SK6"), _T("*"), buf, sizeof(buf)/sizeof(TCHAR), _T("C:\\demo.inI"));
    wcstombs(buf2, buf, sizeof(buf2));
    cout << buf2 << endl;
    return 0;
}
Avatar billede kjeldsted Novice
26. april 2009 - 10:42 #8
Ser ud til at virke som det skal.

Mange, mange tak. Og smid et svar hvis du vil have lidt point. Dem fortjener du i hvert fald.
Avatar billede kjeldsted Novice
26. april 2009 - 14:48 #9
Jeg har desuden lige ét spørgsmål til.

Hvordan kan jeg få den til at hente oplysninger fra den .ini fil der ligger i samme mappe som selve .exe filen?
Avatar billede arne_v Ekspert
26. april 2009 - 16:47 #10
svar
Avatar billede arne_v Ekspert
26. april 2009 - 16:53 #11
char fnm[300];
    getcwd(fnm, sizeof(fnm));
    strcat(fnm, "\\demo.ini");
Avatar billede arne_v Ekspert
26. april 2009 - 16:54 #12
Du skal så eventuel lige konvertere den om fra ANSI til UNICODE med mbstowcs.
Avatar billede kjeldsted Novice
26. april 2009 - 16:55 #13
Jeg kigger lige på det sidste lidt senere.

Men endnu engang tak :)
Avatar billede kjeldsted Novice
26. april 2009 - 17:49 #14
Det virker perfekt. Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester