已部署的win32应用程序的相对路径问题

时间:2011-02-23 13:07:02

标签: c++ file path relative

我编写了一个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。因为,它(以某种方式)假设它当前正在桌面上工作。

通过在HKEY_CLASSES_ROOT中更改打开的shell命令,有没有简单的方法来处理这个问题?天真的解决方案是使用类似“%my_app_location / the_file.txt”的内容来更改所有文件打开操作。我不想那样做。

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

始终使用完整路径名来打开文件。换句话说,不要打开“foo.txt”,打开“c:\ bar \ foo.txt”。要查找EXE的安装目录,请使用GetModuleFileName(),为模块句柄传递NULL。

答案 1 :(得分:1)

这些天你不应该把文件添加到c:\ my_app .... 而是使用ProgramData文件夹和完整路径。

将SHGetSpecialFolderPathA与CSIDL_COMMON_APPDATA一起使用以获取ProgramData文件夹并创建程序目录并添加文件。

答案 2 :(得分:0)

您应该使用SetCurrentDirectory功能为应用的文件夹设置当前目录。之后,您可以按名称打开文件而不使用完整路径