Проблема относительного пути для развернутого приложения win32
Я написал программу на C++ и развернул ее, скажем, в c:\my_app, а путь к моему исполняемому файлу - c:\my_app\my_app.exe. Скажем, my_app нужно много файлов, таких как the_file.txt, который находится в c:\my_app\the_file.txt.
В моем исполняемом файле я открываю текстовый файл как, xx.open("the_file.txt");
Более того, я связал свою программу, скажем, с расширением.myp.
Когда я нахожусь на рабочем столе и хочу открыть файл с именем example.myp, моя программа не может видеть the_file.txt. Потому что это (каким-то образом) предполагает, что в настоящее время он работает на рабочем столе.
Есть ли простой способ справиться с этой проблемой, изменив команду оболочки для открытия в HKEY_CLASSES_ROOT? Наивным решением было бы изменить все операции открытия файлов с помощью чего-то вроде "%my_app_location/the_file.txt". Я не хочу этого делать.
Спасибо за вашу помощь.
3 ответа
Всегда используйте полное имя пути, чтобы открыть файл. Другими словами, не открывайте "foo.txt", открывайте "c:\bar\foo.txt". Чтобы найти каталог установки вашего EXE, используйте GetModuleFileName(), передавая NULL для дескриптора модуля.
В наши дни не следует добавлять файлы в c:\my_app.... Вместо этого используйте папку ProgramData и полные пути.
Используйте SHGetSpecialFolderPathA с CSIDL_COMMON_APPDATA, чтобы получить папку ProgramData, создать каталог программ и добавить свои файлы.
Вы должны установить текущий каталог для папки вашего приложения с помощью функции SetCurrentDirectory. После этого вы можете открыть файл по имени без полного пути