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);
这里讨论了与平台无关的解决方案: 如何获取程序正在运行的目录?     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...