проблема относительного пути для развернутого приложения win32 - PullRequest
0 голосов
/ 23 февраля 2011

Я написал программу на c ++ и развернул ее, скажем, в c: \ my_app, а путь к моему исполняемому файлу - c: \ my_app \ my_app.exe. Скажем, my_app нужно много файлов, таких как the_file.txt, который находится в c: \ my_app \ the_file.txt.

В моем исполняемом файле я открываю txt-файл как xx.open ("the_file.txt");

Более того, я связал свою программу, скажем, с расширением .myp.

Когда я нахожусь на рабочем столе и хочу открыть файл с именем example.myp, моя программа не может видеть the_file.txt. Потому что он (каким-то образом) предполагает, что в настоящее время он работает на рабочем столе.

Есть ли простой способ справиться с этой проблемой, изменив команду оболочки на open в HKEY_CLASSES_ROOT? Наивным решением было бы изменить все операции открытия файлов с помощью чего-то вроде «% my_app_location / the_file.txt». Я не хочу этого делать.

Спасибо за вашу помощь.

Ответы [ 3 ]

5 голосов
/ 23 февраля 2011

Всегда используйте полный путь к файлу, чтобы открыть файл. Другими словами, не открывайте "foo.txt", открывайте "c: \ bar \ foo.txt". Чтобы найти каталог установки вашего EXE-файла, используйте GetModuleFileName (), передав NULL для дескриптора модуля.

1 голос
/ 23 февраля 2011

В наши дни не следует добавлять файлы в c: \ my_app .... Вместо этого используйте папку ProgramData и полные пути.

Используйте SHGetSpecialFolderPathA с CSIDL_COMMON_APPDATA, чтобы получить папку ProgramData и создать каталог вашей программы.и добавьте свои файлы.

0 голосов
/ 23 февраля 2011

Вы должны установить текущий каталог для папки вашего приложения с помощью функции SetCurrentDirectory . После этого вы можете открыть файл по имени без полного пути

...