Win API 本地文件参考 c++



我正在尝试硬编码到程序中以在与可执行文件相同的目录中查找C++配置.ini,而不知道文件的完整路径。 我正在尝试找到一种方法来对可执行文件进行本地引用。

基本上加载("./config.ini"(不做

("C:\foo\bar\config.ini"(

实际上没有任何保证的可移植方法可以做到这一点,但我喜欢使用此代码,因为它适用于绝大多数情况(除非涉及符号链接或其他魔法(:

boost::filesystem::current_path(boost::filesystem::path(argv[0]).remove_filename());

如果你愿意使用特定于平台的代码,请查看Windows上的GetModuleFileNamegetpid的混合,从Linux上的/procreadlink中读取。

您希望在Windows上GetModuleFilename()(传递NULL以获取当前可执行文件的文件名(。 否则,请在程序早期调用boost::filesystem::initial_path()(请参阅链接中的 Boost 文档以了解尽早执行此操作的原因(。 这应该涵盖大多数情况。

编辑

脑功能障碍。 我们总是从可执行文件的目录中启动程序,所以boost::initial_path()的事情有效,但如果你从另一个 direcory 启动程序,它就不会那么好用。 很抱歉对此感到困惑。 但是,在Windows上,我会从GetModuleFilename获取路径并使用boost::path来操作结果。

对于 windows,这将获取包含可执行的目录作为 c++ 字符串:

#include <windows.h>
#include <string>
#include <iostream>
using namespace std;;
string ExePath() {
    char buffer[MAX_PATH];
    GetModuleFileName( NULL, buffer, MAX_PATH );
    string::size_type pos = string( buffer ).find_last_of( "\/" );
    return string( buffer ).substr( 0, pos);
}

然后,您可以在末尾标记配置文件的名称。

对于 Windows:

#include <direct.h>
char cur_path[FILENAME_MAX];
if (!_getcwd(cur_path, sizeof(cur_path)))
{
    // deal with error
}
cur_path[sizeof(cur_path) - 1] = '/0'; // adding  at the end of the string
printf("Current dir: %s", cur_path);

这里讨论了与平台无关的解决方案:

如何获取运行程序的目录?

相关内容

  • 没有找到相关文章

最新更新