微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Win API本地文件参考c ++

如何解决Win API本地文件参考c ++

| 我试图将代码硬编码到C ++程序中,以在与可执行文件相同的目录中查找config.ini,而不知道文件的完整路径。我正在尝试找到对可执行文件进行本地引用的方法。 基本上加载(\“ ./ config.ini \”) 不做 (\“ C:\\ foo \\ bar \\ config.ini \”)     

解决方法

        您希望在Windows上为“ 0”(传递NULL以获取当前可执行文件的文件名)。否则,请在程序中尽早调用ѭ1(请参阅链接中的Boost docs以获取提早执行此操作的原因)。那应该涵盖大多数情况。 编辑 脑部故障。我们总是从可执行文件的目录中启动程序,因此
boost::initial_path()
工作正常,但是如果您从另一个目录启动程序将无法正常工作。对不起,对此感到困惑。但是,在Windows上,我将从
GetModuleFilename
获取路径,并使用
boost::path
处理结果。     ,        确实并没有任何保证可移植的方式来执行此操作,但是我喜欢使用此代码,因为它适用于绝大多数情况(除非涉及符号链接或其他魔术):
boost::filesystem::current_path(boost::filesystem::path(argv[0]).remove_filename());
如果您愿意使用平台特定的代码,请在Windows上查看
GetModuleFileName
和mix7ѭ的组合,从Linux上的
/proc
readlink
中读取。     ,        对于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 \\0 at the end of the string

printf(\"Current dir: %s\",cur_path);
这里讨论了与平台无关的解决方案: 如何获取程序正在运行的目录?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。