вместо папки присутствует обычный файл, то папка рядом не создаётся, притом filesystem в курсе, что это файл, а не папка, но создавать всё равно не хочет. Судя по описанию на cppreference, следует проверка на существование пути, но почему-то нет проверки, что по существующему пути находится папка. Кто-нибудь знает пути обхода за исключением использования непосредственно winapi/posix-функций, или удаления "лишнего" файла?
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
auto cur_path = fs::current_path();
auto logs_path = cur_path / "logs";
if( !fs::exists( logs_path ) )
{
std::cout << "First fork" << std::endl;
fs::create_directory( logs_path );
}
else if( !fs::is_directory( logs_path ) )
{
std::cout << "Second fork" << std::endl;
fs::create_directory( logs_path );
}
std::system("pause");
return 0;
}
а в std::filesystem нет никакого варианта проверить что перед ней лежит?
Всмысле? Есть проверки, что лежит по пути (файл, или папка), что путь существует
"притом filesystem в курсе, что это файл, а не папка" Если она в курсе, то значит это можно из кода проверить и обработать ситуацию, согласен как то странно, но я бы решил проверкой
Можно, но получается, что единственный вариант обработки - удаление файла, что мне сильно не нравится.
Такое поведение внесено в DR, где авторы представили мотивацию того, что такое поведение было бы лучше по сравнению с ошибкой. Думаю, если вы точно знаете, что вам нужна такая проверка, ваш выход – utils::create_directory с нужным поведением. Делайте проверку и возвращайте ошибку
почему? Изменить путь и создать другую директорию
Вообще это специализированная папка приложения, куда по-здравому пользователь не должен заглядывать, или что-то там делать, поэтому правильнее, всё-таки, будет удалить файл, похоже
А что за utils::create_directory ? Не смог нагуглить.
можно сделать ещё файл с специфичным названием и диким собственным расширением, который точно не будет в папке, а если будет его можно спокойно удалить, в котором будет хранится информация о том какая директория используется и таким образом заменить директорию на любую)))
Я таким образом предложил написать собственную вспомогательную реализацию такой функции на замену той, что в стандартной библиотеке
А, понял, видимо, так и придётся сделать, спасибо
Подумаю, спасибо за идею
Обсуждают сегодня