Win API 本地文件参考 c++
我试图将其硬编码到 C++ 程序中,以在与可执行文件相同的目录中查找 config.ini,而不知道该文件的完整路径。我正在尝试找到一种方法来对可执行文件进行本地引用。
基本上加载(“./config.ini”) 不执行
("C:\foo\bar\config.ini")
I am trying to hard code into C++ program to look for config.ini in the same directory as the executable, without knowing the complete path to the file. I am trying to find a way to make a local reference to the executable.
Basically load ("./config.ini")
without doing
("C:\foo\bar\config.ini")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
实际上并没有任何有保证的可移植方法来执行此操作,但我喜欢使用此代码,因为它在绝大多数情况下都有效(除非涉及符号链接或其他魔法):
如果您愿意使用特定于平台的代码,请查看Windows 上的
GetModuleFileName
和 Linux 上的getpid
的组合,从/proc
和readlink
读取。There isn't really any guaranteed portable way of doing this, but I like to use this code because it works in the vast majority of cases (unless symlinks or other magic is involved):
If you are willing to use platform specific code look at
GetModuleFileName
on Windows and a mix ofgetpid
, reading from/proc
andreadlink
on Linux.您需要
GetModuleFilename()
在 Windows 上(传递 NULL 以获取当前可执行文件的文件名)。否则,调用boost::filesystem: :initial_path()
在程序的早期(请参阅链接中的 Boost 文档,了解尽早执行此操作的原因)。这应该涵盖了大部分情况。编辑
大脑功能障碍。我们总是从可执行文件的目录启动程序,因此 boost::initial_path() 可以工作,但如果从另一个目录启动程序,它就不会那么好用。很抱歉对此造成困惑。不过,在 Windows 上,我会从
GetModuleFilename
获取路径,并使用boost::path
来操作结果。You want
GetModuleFilename()
on Windows (pass NULL to get filename of current executable). Otherwise, callboost::filesystem::initial_path()
early in the program (see Boost docs in link for the reason to do this early). That should cover most of the situations.Edit
Brain malfunction. We always start our programs from the executable's directory, so the
boost::initial_path()
thing works, but it won't work so well if you start the program from another direcory. Sorry for the confusion on that. On Windows, though, I'd get the path fromGetModuleFilename
and useboost::path
to manipulate the result.对于 Windows,这将获取包含 C++ 字符串形式的可执行文件的目录:
然后您可以在末尾标记配置文件的名称。
For windows, this will get the directory containing the excutable as a c++ string:
You can then just tag the name of your config file on the end.
对于 Windows:
此处讨论了与平台无关的解决方案:
如何获取程序运行的目录?
For Windows:
A platform-agnostic solution was discussed here:
How do I get the directory that a program is running from?