2011-02-23 134 views
0

我編寫了一個C++程序並將其部署在c:\ my_app中,並且我的可執行文件的路徑是c:\ my_app \ my_app.exe。說,my_app需要許多文件,如位於c:\ my_app \ the_file.txt中的the_file.txt文件。已部署的win32應用程序的相對路徑問題

在我的可執行文件中,我打開txt文件爲:xx.open(「the_file.txt」);

此外,我已將我的程序與.myp擴展名關聯起來。

當我在桌面上,並且想打開一個名爲example.myp的文件時,我的程序看不到the_file.txt。因爲它(以某種方式)假定它目前在桌面上工作。

是否有任何簡單的方法來通過更改shell命令來打開HKEY_CLASSES_ROOT來處理此問題?天真的解決方案是用「%my_app_location/the_file.txt」之類的東西來改變所有的文件打開操作。我不想這樣做。

感謝您的幫助。

回答

5

總是使用完整路徑名打開文件。換句話說,不要打開「foo.txt」,打開「c:\ bar \ foo.txt」。要找到EXE的安裝目錄,使用GetModuleFileName(),爲模塊句柄傳遞NULL。

0

您應該使用SetCurrentDirectory函數爲您的應用程序的文件夾設置當前目錄。之後,您可以通過名稱打開文件而不使用完整路徑

1

現在,您不應將文件添加到c:\ my_app .... 而應使用ProgramData文件夾和完整路徑。

使用帶CSIDL_COMMON_APPDATA的SHGetSpecialFolderPathA來獲取ProgramData文件夾並創建你的程序目錄並添加你的文件。