c++: запись файла в несуществующую папку

137
19 октября 2019, 20:30

Подскажите пожалуйста наилучший способ как записать файл в некоторую папку folder1\folder2\...\folderN, если в наличии только папка folder1\folder2\...\folderM.

При этом запись выполняется с помощью std::ofstream.

Понятно, что задачу можно решить в лоб - распарсить путь к файлу и проверить существует ли каждая папка в пути и если нет - создать ее.

Но может/наверное существует более простой путь для решения этой задачи?

Answer 1

Я бы делал так - воспользовался стандартной библиотекой <filesystem> и создавал бы каталог с помощью create_directories() не глядя, есть ли уже такой каталог или нет. Нет - создаст, есть - ну и хорошо :)

А потом бы создавал файл.

Все равно проверка существования 100% гарантии не дает - между проверкой и созданием файла кто-то другой может каталог и стереть :)

Update

#include <iostream>
#include <filesystem>
int main(int argc, const char * argv[])
{
    std::error_code e;
    std::cout << std::filesystem::create_directories("G:\\Tmp\\Test\\aaa\\bbb\\ccc",e) << std::endl;
    std::cout << std::filesystem::create_directory("G:\\Tmp\\Test\\zzz",e) << std::endl;
}

VC++ 2017 15.9.7

Скомпилировало, работает.

READ ALSO
sh: 1: Syntax error: word unexpected (expecting &ldquo;)&rdquo;)

sh: 1: Syntax error: word unexpected (expecting “)”)

Программа должна получать на вход координаты из командной строки по образцу (x;y) , вроде бы все норм , но выдает ошибкуБыл бы благодарен, если...

120
Qt отображение корневого элемента дерева

Qt отображение корневого элемента дерева

Хочу создать свою модель дерева, получается вот такое:

122
Фабричный метод и анонимные классы

Фабричный метод и анонимные классы

Разбираюсь с абстрактными классами в java и в качестве примера их использования приводиться фабричный метод, и говориться что в данном случае...

92