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.
Annonceindlæg fra FPT Software
25. april 2009 - 23:28
#1
Du skal bruge GetPrivateProfileString og GetPrivateProfileInt. Jeg kan prøve at bixe et eksempel.
25. april 2009 - 23:31
#2
Det ville være super, hvis du kunne bixe et eksempel.
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; }
25. april 2009 - 23:48
#4
Koden bliver lidt mere tricky hvis du bruger UNICODE !
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
26. april 2009 - 00:22
#6
Så bruger du unicode .... Jeg kigger på det.
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; }
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.
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?
26. april 2009 - 16:47
#10
svar
26. april 2009 - 16:53
#11
char fnm[300]; getcwd(fnm, sizeof(fnm)); strcat(fnm, "\\demo.ini");
26. april 2009 - 16:54
#12
Du skal så eventuel lige konvertere den om fra ANSI til UNICODE med mbstowcs.
26. april 2009 - 16:55
#13
Jeg kigger lige på det sidste lidt senere. Men endnu engang tak :)
26. april 2009 - 17:49
#14
Det virker perfekt. Tak.
Kurser inden for grundlæggende programmering