在现代C ++中设置cwd

时间:2017-06-18 01:20:47

标签: c++ c++17

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

这是因为在VS2017中构建和运行我的项目时,cwd实际上是$(ProjectDir),而不是$(OutputDir),正如我所料。我知道我could change this in Visual Studio,但我也想对我的代码进行虚拟证明。

为此,我有一段代码片段用于在main的开头重置我的路径:

int main(int argc, char *argv[])
{
    Utils::resetcwd(argc, argv);
...

我想知道我做的是否有什么是&#34;邪恶&#34;或者不会跨平台兼容(假设文件系统库没有经历任何重大更改)。

我知道在* 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,基本上我做了正确的事吗?

0 个答案:

没有答案