std :: filesystem :: create_directories Visual Studio 2017 - PullRequest
0 голосов
/ 24 сентября 2018

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

Однако в строке, которая вызывает create_directories Iполучить ошибку: 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 Ответ

0 голосов
/ 24 сентября 2018

Чтобы ответить на мой собственный вопрос.Проблема была в том, что я забыл включить заголовок экспериментальной / файловой системы.Теперь все работает отлично.Это была глупая ошибка, но я новичок в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...