Programowanie w języku C/C++ » FAQ

Okno dialogowe zapisu i odczytu plików

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);

5 komentarzy

marcinEc 2005-07-19 13:26

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

widget 2005-06-24 07:32

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

Marooned 2005-06-23 23:48

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()

migajek 2005-06-24 09:07

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);

brodny 2005-06-24 17:34

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