C/C++ FAQ

Okno dialogowe zapisu i odczytu plików

widget

Kidyś nie mogłem rozwiązać pewnego problemu.
Otóż, po wywołaniu okna dialogowego zapisu/odczytu plików (GetOpenFileName, GetSaveFileName) zmienia się ścieżka do aktualnie uruchomionego programu (o czym nie miałem pojęcia ;). Ścieżkę tę można pobrać funkcją: GetCurrentDirectory();

Więc, aby uniknąć zmiany ścieżki do programu należy przed uruchomieniem okna dialogowego do zapisu/odczytu plików zapisać do jakiejś zmiennej aktualną ścieżkę do programu, a następnie przypisać ją na nowo:

char ProgramPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, ProgramPath);
 
//wywołanie okna dialogowego do zapisu/odczytu pliku
 
SetCurrentDirectory(ProgramPath);
FAQ

5 komentarzy

Po co takie kombinacje alpejskie?!
W każdym momencie można se pobrać ścieżkę do programu tak:

ExtractFilePath(Application->ExeName)

A jak ktoś chce ją wyświetlić, to jeszcze można ją upiększyć:

ExtractFilePath(Application->ExeName).LowerCase()

Marooned: jesli komus sie nie chce zmieniac calego kodu (szukac wszystkich operacji na plikach) choc i tak powinno sie stosowac Application->ExeName to mozna SetCurrentDirectory(Application->ExeName);

Ehm, mastahy... RTFM!
OFN_NOCHANGEDIR
Restores the current directory to its original value if the user changed the directory while searching for files.

Ale to tylko w borlandzie, a w czystym WINAMPI albo w MFC nie zadziala.

ParamStr(0) działa tak samo - w rzeczywistości Application->ExeName zwraca właśnie wartość ParamStr(0)