В настоящее время я пытаюсь работать с std::filesystem
. Я работаю на 64-битной Windows 7, используя MinGW-W64 GCC 7.1.0. Поскольку этот компилятор не поддерживает std::filesystem
, я должен включить экспериментальную версию и ссылку с -lstdc++fs
.
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
Это работало нормально до того момента, когда я хотел создать вложенные каталоги. Если я создаю каталоги по одному, используя create_directory()
, все работает отлично. Теперь, если я использую create_directories()
вместо этого, он выдает filesystem_error
, если один из каталогов уже существует.
fs::path levelA{"."};
fs::path levelB{"folder"};
fs::path levelAB = levelA / levelB; // "./folder"
bool create_separately; // set this bool as needed
if (create_separately) {
/* This works perfectly */
fs::create_directory(levelA);
fs::create_directory(levelAB);
}
else {
/* This throws because "." already exists */
fs::create_directories(levelAB);
}
Сравнивая документацию экспериментальной версии со стандартной версией, было добавлено дополнительное предложение для стандартной версии:
Выполняет (1) для каждого элемента p, который еще не существует. Если p уже существует, функция ничего не делает (это условие не рассматривается как ошибка).
Почему это воспринималось как ошибка? Это считается ошибкой?
Дополнительно, есть ли простой способ обновить GCC в Windows? Я что-то читал о выпуске GCC 8.1.0 и какой-то новой версии MinGW, поддерживающей его, но я не могу найти какие-либо загрузки.