std :: filesystem :: create_directories Visual Studio 2017

时间:2018-09-23 21:54:18

标签: c++ visual-studio c++17

我正在使用Visual Studio Community 2017 15.8.2。我正在尝试使用this SO thread中的解决方案为路径中的每个元素创建一个目录(如果不存在)。

但是,在调用create_directories的行上出现错误:namespace "std::experimental::filesystem" has no member "create_directories."

我尝试使用std::experimental::filesystemstd::filesystem都没有成功。

我尝试通过将语言标准设置为ISO C++17 Standard (/std:c++17)来将项目属性中的c ++版本更改为c ++ 17,这仍然是相同的错误。

当我进入文件系统名称空间以查看标头时,我发现没有create_directories函数。

根据this应该有一个这样的函数,但是在我正在阅读的头文件中,我只看到所有这些类和函数中的path类。头文件的位置是: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include

这是我的代码的样子:

#include "pch.h"
#include <fstream>

int main(){
namespace fs = std::experimental::filesystem; // In C++17 use std::filesystem.

try {
    fs::create_directories("C:\\Program Files\\Test");
}
catch (std::exception& e) { // Not using fs::filesystem_error since std::bad_alloc can throw too.
    std::cout << e.what() << std::endl;
}
}

1 个答案:

答案 0 :(得分:-1)

回答我自己的问题。问题是我忘了包含实验性/文件系统标头。现在一切正常。这是一个愚蠢的错误,但是我对C ++还是陌生的。

因此,解决方案是在我的代码中添加#include <experimental/filesystem>

这是我的代码现在的样子:

#include "pch.h"
#include <fstream>
#include <experimental/filesystem>

int main(){
namespace fs = std::experimental::filesystem; // In C++17 use std::filesystem.

try {
    fs::create_directories("C:\\Program Files\\Test");
}
catch (std::exception& e) { // Not using fs::filesystem_error since std::bad_alloc can throw too.
    std::cout << e.what() << std::endl;
}
}

当我以为我正在查看文件系统头文件时,我才敏锐地查看了fstream头文件。这就是为什么我找不到我想要的功能的原因。困扰我的是fstream标头还具有一个名为filesystem的命名空间,因此我实际上是在查看它(因为Visual Studio将我指向该标头,因为它是我包括的唯一包含文件系统名称空间的标头它。

此外,由于我将语言设置更改为ISO C ++ 17 Standard,所以我也可以改用#include <filesystem>std::filesystem