Bul*_*ony 2 c++ configuration-files working-directory execution
可能重复:
如何在C中查找可执行文件的位置
嗨,
我正在寻找一种可移植的方法来查找程序的根目录(在C++中).例如,在Linux下,用户可以将代码复制到/ opt,将其添加到PATH,然后执行它:
cp -r my_special_code /opt/
export PATH=${PATH}:/opt/my_special_code/
cd /home/tony/
execution_of_my_special_code
Run Code Online (Sandbox Code Playgroud)
(其中"execute_my_special_code"是/ opt/my_special_code中的程序).
现在,作为"execution_of_my_special_code"的开发人员,是否有一种可移植的编程方法可以发现可执行文件位于/ opt/my_special_code中?
第二个例子是在MS Windows上:如果我当前的工作目录在一个硬盘驱动器上(例如"C:\")而可执行文件放在另一个硬盘驱动器上(例如"D:\")怎么办?
最终,目标是读取与程序代码一起打包的一些预定义配置文件,而不强制用户进入安装目录.
非常感谢提前!
有没有这样的移植的方法.C和C++标准都不要求argv
数组保存此信息,并且标准库中没有提供它的库例程.
您需要找到一种以便携式方式以特定于平台的方式获取此信息,例如GetModuleFileName
在Windows下或/proc/self/exe
在Linux 下读取.
在任何情况下,使用可执行文件存储配置信息实际上是一个坏主意,因为这意味着它对所有用户都是相同的.UNIX的方法是在/etc
树中存储特定于程序的信息,并在用户的主目录中存储特定于用户的信息.例如,对于调用的应用程序dodgybob
,可以调用用户的配置文件$HOME/.dodgybob
或$HOME/.dodgybobrc
.
对于Windows,您应该在注册表(HKLM)中存储特定于程序的信息,并在注册表(HKCU)或用户自己的区域中存储用户特定的信息(例如,Documents & Settings\<username>\Local Settings
尽管正确的方法是SHGetSpecialFolderPath
通过CSIDL_APPDATA
或( Vista和更高版本具有已知文件夹ID,但旧方法仍可在Vista上作为存根功能使用).