我编写了一个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”的内容来更改所有文件打开操作。我不想那样做。
感谢您的帮助。
答案 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功能为应用的文件夹设置当前目录。之后,您可以按名称打开文件而不使用完整路径