C++ 在现代C+中设置cwd+;
我正在使用MSVC的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); ... 我想知道我正在做的任何事情是否是“邪恶的”或不兼容跨平台的(假设
库,试图将当前工作目录重置为可执行目录
这是因为在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(这是您的问题标题要求的)是完全不同的问题。你应该改变你的问题,明确你在寻找什么。