std::filesystem:: create_directory, std::filesystem:: create_directories
|
Definido en el encabezado
<filesystem>
|
||
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (desde C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
noexcept
;
|
(2) | (desde C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const std:: filesystem :: path & existing_p ) ; |
(3) | (desde C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const
std::
filesystem
::
path
&
existing_p,
|
(4) | (desde C++17) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p
)
;
|
(5) | (desde C++17) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
;
|
(6) | (desde C++17) |
mkdir()
con un segundo argumento de
static_cast
<
int
>
(
std::
filesystem
::
perms
::
all
)
(el directorio padre debe existir previamente). Si la función falla porque
p
resuelve a un directorio existente, no se reporta ningún error. En caso contrario, ante un fallo se reporta un error.
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
Contenidos |
Parámetros
| p | - | la ruta al nuevo directorio a crear |
| existing_p | - | la ruta a un directorio del cual copiar los atributos |
| ec | - | parámetro de salida para reporte de errores en la sobrecarga no lanzadora |
Valor de retorno
true si se creó un directorio nuevo para el directorio al que p hace referencia, false en caso contrario.
Excepciones
Cualquier sobrecarga no marcada como
noexcept
puede lanzar
std::bad_alloc
si la asignación de memoria falla.
Notas
La sobrecarga que preserva atributos
(3,4)
es invocada implícitamente por
copy()
cuando se copian directorios recursivamente. Su equivalente en boost.filesystem es
copy_directory
(con el orden de argumentos invertido).
Ejemplo
#include <cassert> #include <cstdlib> #include <filesystem> int main() { std::filesystem::current_path(std::filesystem::temp_directory_path()); // Uso básico std::filesystem::create_directories("sandbox/1/2/a"); std::filesystem::create_directory("sandbox/1/2/b"); // El directorio ya existe (retorna false, sin error) assert(!std::filesystem::create_directory("sandbox/1/2/b")); // Uso de copia de permisos std::filesystem::permissions( "sandbox/1/2/b", std::filesystem::perms::others_all, std::filesystem::perm_options::remove ); std::filesystem::create_directory("sandbox/1/2/c", "sandbox/1/2/b"); std::system("ls -l sandbox/1/2"); std::system("tree sandbox"); std::filesystem::remove_all("sandbox"); }
Salida posible:
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
sandbox
└── 1
└── 2
├── a
├── b
└── c
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2935 | C++17 | error si el objetivo ya existe pero no es un directorio | no es error |
| LWG 3014 | C++17 |
error_code
sobrecarga de
create_directories
marcada noexcept pero puede asignar memoria
|
noexcept eliminado |
| P1164R1 | C++17 | fallo de creación causado por un archivo existente no-directorio no es un error | convertido en error |
Véase también
|
(C++17)
(C++17)
|
crea un enlace simbólico
(función) |
|
(C++17)
|
copia archivos o directorios
(función) |
|
(C++17)
|
identifica permisos del sistema de archivos
(enumeración) |