【问题标题】:std::filesystem::create_directories Visual Studio 2017std::filesystem::create_directories Visual Studio 2017
【发布时间】:2019-02-27 10:47:12
【问题描述】:

我正在使用 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;
}
}

【问题讨论】:

  • @Tas 我刚刚通过添加 MCVE 来编辑问题。现在还好吗?
  • 您忘记包含 &lt;filesystem&gt; 标头,它不再是 -std:c++17 的实验性功能:godbolt.org/z/TLZ9JR
  • 我知道,我已经回答了我自己的问题。我编辑了我的问题只是为了更清楚,所以它可能对其他人有帮助。无论如何感谢您的帮助

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


【解决方案1】:

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

因此,解决方案是将:#include &lt;experimental/filesystem&gt; 添加到我的代码中。

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

#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 标准,因此我还可以使用 #include &lt;filesystem&gt;std::filesystem

【讨论】:

  • 您是否在项目属性中将语言设置为 C++17?然后只需包含
  • 是的,这也可以正常工作(如果我将语言设置更改为 C++17,则无需实验)。问题是我根本忘记包含文件系统。我正在查看的头文件实际上是 fstream(因为我包含它是因为我之前使用过它)并且 fstream 有一个也称为文件系统的命名空间,因此我很困惑。
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2012-08-24
  • 2018-04-15
  • 2018-07-20
  • 2019-04-04
  • 2017-12-14
  • 2018-01-15
相关资源
最近更新 更多