std::experimental::filesystem:: create_directory, std::experimental::filesystem:: create_directories
From cppreference.net
<
cpp
|
experimental
|
fs
|
Определено в заголовочном файле
<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-системах атрибуты копируются как при выполнении
В ОС Windows атрибуты копируются как при выполнении
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
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
Смотрите также
|
создает символическую ссылку
(функция) |
|
|
копирует файлы или директории
(функция) |
|
|
определяет права доступа файловой системы
(перечисление) |