2011-02-23 135 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文件夹并创建你的程序目录并添加你的文件。