Я использую Visual Studio Community 2017 15.8.2. Я пытаюсь использовать решение из этот поток SO, чтобы создать каталог для каждого элемента пути, если он не существует.

Однако на линии, которая вызывает create_directories, я получаю сообщение об ошибке: namespace "std::experimental::filesystem" has no member "create_directories."

Я пробовал как с std::experimental::filesystem, так и с std::filesystem, но безуспешно.

Я попытался изменить версию c ++ в свойствах проекта на c ++ 17, установив стандарт языка на ISO C++17 Standard (/std: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
user3362334 24 Сен 2018 в 00:54

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, я также мог использовать вместо них #include <filesystem> и std::filesystem.

0
user3362334 24 Сен 2018 в 12:58