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