Win API本地文件参考c ++

时间:2011-05-31 19:57:57

标签: c++ file io

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

基本上加载(“./ config.ini”) 没有做

( “C:\ FOO \条\的config.ini”)

4 个答案:

答案 0 :(得分:2)

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

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

如果您愿意使用特定于平台的代码,请查看Windows上的GetModuleFileName以及getpid的混合内容,并在Linux上阅读/procreadlink

答案 1 :(得分:1)

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

修改

脑功能障碍。我们总是从可执行文件的目录开始我们的程序,所以boost::initial_path()的东西有效,但是如果你从另一个目录启动程序它将无法正常工作。对不起,对此感到困惑。但是,在Windows上,我会从GetModuleFilename获取路径并使用boost::path来操作结果。

答案 2 :(得分:0)

对于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);
}

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

答案 3 :(得分:-1)

对于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 \0 at the end of the string

printf("Current dir: %s", cur_path);

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

How do I get the directory that a program is running from?