Odczyt pliku ini w WinApi

0

Witam! Jestem nowy na forum, właśnie założyłem sobie konto, więc gdybym coś źle napisał to przepraszam.
Od pewnego czasu uczę się języka C++. Od niedawna zacząłem bawić się WinApi i mam pewnien problem.
Chciałbym odczytywać i zapisywać dane do pliku ini którego lokalizacja będzie wskazywana w specjalnym okienku wyboru pliku które jest dostępne w WinApi. No i zrobiłem tak:

OPENFILENAME wczytaj;
char sNazwaPliku[ MAX_PATH ] = "";
ZeroMemory( & wczytaj, sizeof( wczytaj) );
wczytaj.lStructSize = sizeof( wczytaj );
wczytaj.lpstrFilter = "Plik ini(*.ini)\0*.ini\0Wszystkie pliki\0*.*\0";
wczytaj.nMaxFile = MAX_PATH;
wczytaj.lpstrFile = sNazwaPliku;
wczytaj.lpstrDefExt = "ini";
wczytaj.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if( GetOpenFileName( & wczytaj) )
{
TCHAR   Bufor[80];
const char* sNazwaPliku; 
GetPrivateProfileString (TEXT("sekcja"), TEXT("klucz"), TEXT("Błąd!"), Bufor, 80, sNazwaPliku);
SetWindowText( hPole, Bufor );
}

Po kompilacji tego kodu wszystko pięknie się uruchamia. Klikam wcześniej stworzony przycisk który wywołuje to okienko wyboru pliku (mam też pole tekstowe do wyświetlenia odczytanych danych), wybieram plik ini, klikam otwórz i nie wiem czemu aplikacja się zawiesza i pokazuje się Windowsowy komunikat "Program program1.exe przestał działać. Trwa wyszukiwanie rozwiązania problemu...". Nie wiem co robię źle ale wydaje mi się że może chodzić o typ zmiennej sNazwaPliku lub zmiennej Bufor ale nie mam pojęcia czy na pewno o to chodzi ani jak to naprawić. :(
Będę bardzo wdzięczny za pomoc!

0

Oczywiście próbowałeś debugować i stwierdzić dokładnie na której instrukcji kod się zawiesza?

0

No właśnie mam pewien problem z debugowaniem bo po uruchomieniu debugowania klikam na przycisk otwierający okienko wyboru pliku w moim programie i pojawia się komunikat: "W twoim programie zgłoszono naruszenie praw dostępu (błąd segmentacji)". Chyba że robię coś nie tak?

0

Ustawiłeś chociaż breakpoint? ...

0

a co ci zwraca GetPrivateProfileString?

0

Jeżeli usunę GetPrivateProfileString to program już się nie zawiesza. A jeżeli z powrotem wpiszę i podam ścieżke do pliku od razu to też nie ma problemu. Więc chodzi o coś ze zmienną sNazwaPliku. :/

0

Cóż, wypadałoby przypisać jej jakąś wartość, prawda?

0
Patryk27 napisał(a):

Cóż, wypadałoby przypisać jej jakąś wartość, prawda?

Zmiennej sNazwaPliku? A to

wczytaj.lpstrFile = sNazwaPliku;

nie przypisuje jej wartości pobranej od użytkownika z okienka??

Edit: Gdy w linijce

SetWindowText( hPole, Bufor );

zamienię "Bufor" na "sNazwaPliku" w polu tekstowym pokazuje się piękna ścieżka do mojego pliku więc jak nie przechowuje ścieżki jak u mnie się pokazała? Może mi ktoś to wyjaśnić?

Edit2: Ok problem udało mi się rozwiązać! Dziękuję wszystkim próbującym pomóc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1