Namespaces
Variants

std::experimental::filesystem:: create_directory, std::experimental::filesystem:: create_directories

From cppreference.net
Определено в заголовочном файле <experimental/filesystem>
bool create_directory ( const path & p ) ;
bool create_directory ( const path & p, error_code & ec ) ;
(1) (filesystem TS)
bool create_directory ( const path & p, const path & existing_p ) ;
bool create_directory ( const path & p, const path & existing_p, error_code & ec ) ;
(2) (filesystem TS)
bool create_directories ( const path & p ) ;
bool create_directories ( const path & p, error_code & ec ) ;
(3) (filesystem TS)
1) Создает директорию p как с помощью POSIX mkdir() со вторым аргументом static_cast < int > ( fs :: perms :: all ) (родительская директория должна уже существовать). Если p уже существует и является директорией, функция ничего не делает (это условие не считается ошибкой).
2) Аналогично (1) , за исключением того, что атрибуты новой директории копируются из existing_p (которая должна быть существующей директорией). Зависит от ОС, какие атрибуты копируются: в POSIX-системах атрибуты копируются как при выполнении
stat(existing_p.c_str(), &attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
В ОС Windows атрибуты копируются как при выполнении
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
3) Выполняет (1) для каждого элемента p который еще не существует.

Непорождающие исключения перегрузки возвращают false при возникновении любой ошибки.

Содержание

Параметры

p - путь к новой создаваемой директории
existing_p - путь к директории, из которой копируются атрибуты
ec - выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке

Возвращаемое значение

1,2) true если создание директории прошло успешно, false в противном случае.

Исключения

1,3) Перегрузка, не принимающая параметр error_code & , выбрасывает исключение filesystem_error при ошибках базового API ОС, конструируемое с p в качестве первого аргумента и кодом ошибки ОС в качестве аргумента error code. std:: bad_alloc может быть выброшено при неудачном выделении памяти. Перегрузка, принимающая параметр error_code & , устанавливает его в код ошибки API ОС при сбое вызова API ОС и выполняет ec. clear ( ) при отсутствии ошибок. Данная перегрузка имеет
noexcept спецификацию:
noexcept
2) Перегрузка, которая не принимает параметр error_code & , выбрасывает исключение filesystem_error при ошибках в нижележащем API операционной системы, созданное с p в качестве первого аргумента, existing_p в качестве второго аргумента и кодом ошибки ОС в качестве аргумента кода ошибки. std:: bad_alloc может быть выброшено, если выделение памяти завершилось неудачей. Перегрузка, принимающая параметр error_code & , устанавливает его в код ошибки API ОС, если вызов API ОС завершается неудачей, и выполняет ec. clear ( ) , если ошибок не происходит. Данная перегрузка имеет
noexcept спецификацию:
noexcept

Примечания

Перегрузка, сохраняющая атрибуты (2) неявно вызывается функцией copy() при рекурсивном копировании директорий. Её эквивалентом в boost.filesystem является copy_directory (с обратным порядком аргументов).

Пример

#include <cstdlib>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::create_directories("sandbox/1/2/a");
    fs::create_directory("sandbox/1/2/b");
    fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all);
    fs::create_directory("sandbox/1/2/c", "sandbox/1/2/b");
    std::system("ls -l sandbox/1/2");
    fs::remove_all("sandbox");
}

Возможный вывод:

drwxr-xr-x 2 user group 4096 Apr 15 09:33 a
drwxr-x--- 2 user group 4096 Apr 15 09:33 b
drwxr-x--- 2 user group 4096 Apr 15 09:33 c

Смотрите также

создает символическую ссылку
(функция)
копирует файлы или директории
(функция)
определяет права доступа файловой системы
(перечисление)