C++ 在现代C+中设置cwd+;

C++ 在现代C+中设置cwd+;,c++,c++17,C++,C++17,我正在使用MSVC的库,试图将当前工作目录重置为可执行目录 这是因为在VS2017中构建和运行我的项目时,cwd实际上是$(ProjectDir),而不是我所期望的$(OutputDir)。我知道我是这样做的,但我也想对我的代码进行伪验证 为此,我使用以下代码片段重置main开头的路径: int main(int argc, char *argv[]) { Utils::resetcwd(argc, argv); ... 我想知道我正在做的任何事情是否是“邪恶的”或不兼容跨平台的(假设

我正在使用MSVC的
库,试图将当前工作目录重置为可执行目录

这是因为在VS2017中构建和运行我的项目时,cwd实际上是
$(ProjectDir)
,而不是我所期望的
$(OutputDir)
。我知道我是这样做的,但我也想对我的代码进行伪验证

为此,我使用以下代码片段重置main开头的路径:

int main(int argc, char *argv[])
{
    Utils::resetcwd(argc, argv);
...
我想知道我正在做的任何事情是否是“邪恶的”或不兼容跨平台的(假设文件系统库没有经历任何重大更改)

我知道在*nix系统上,使用argv[0]查找cwd不能保证返回绝对路径,但是我找不到多少关于
path
类的有效构造函数。事实上,我感到惊讶的是,下面的工作:

namespace Utils
{
    using namespace std::experimental;

    static void resetcwd(int argc, char *argv[])
    {
        std::string execution(argv[0]);
        auto basePath = execution.substr(0, execution.find_last_of("/"));

        if (basePath.length() == execution.length())
        {
            basePath = execution.substr(0, execution.find_last_of("\\"));
        }

        filesystem::current_path(basePath);
    }
}

<>基本上,我做了正确的事情,根据C++ 2017?< /p>如果你玩的是一条路径而不使用实际的<代码>路径>代码>类型,那么,你就不用使用文件系统库了。到目前为止我还没有找到任何资源。我也觉得有点难闻。好吧,让我们考虑一下。您发现了一个名为
current\u path
的函数,该函数设置当前工作目录。所以术语“当前路径”似乎是文件系统如何指代这类事情。你可能会考虑搜索其他有“当前路径”的函数。你也可能会想到,看看是否有。抱歉@Nicolas-我意识到我在之前的评论中说错了-我实际上想得到可执行文件的目录!cwd非常容易获取(如您所述,使用current_path())。但是我不知道如何获取路径为
的可执行文件目录。获取可执行文件目录与获取或设置cwd(这是您的问题标题要求的)是完全不同的问题。你应该改变你的问题,明确你在寻找什么。