Espacios de nombres
Variantes
Acciones

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

De cppreference.com
 
 
 
Definido en el archivo de encabezado <filesystem>
bool create_directory(conststd::filesystem::path& p );
bool create_directory(conststd::filesystem::path& p, std::error_code& ec )noexcept;
(1) (desde C++17)
bool create_directory(conststd::filesystem::path& p,

                       conststd::filesystem::path& existing_p );
bool create_directory(conststd::filesystem::path& p,
                       conststd::filesystem::path& existing_p,

                       std::error_code& ec )noexcept;
(2) (desde C++17)
bool create_directories(conststd::filesystem::path& p );
bool create_directories(conststd::filesystem::path& p, std::error_code& ec );
(3) (desde C++17)
1) Crea el directorio p como si fuera por la función mkdir() de POSIX con un segundo argumento static_cast<int>(std::filesystem::perms::all) (el directorio padre ya debe existir). Si la función fracasa porque p se resuelve a un directorio existente, no se informa ningún error. De lo contrario, se reporta si ocurre un error.
2) Igual que (1), excepto que los atributos del nuevo directorio se copian de existing_p (que debe ser un directorio que existe). Depende del sistema operativo cuáles atributos se copian. En los sistemas POSIX, los atributos se copian como si fuera por:
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
En el sistema operativo Windows, no se copian los atributos de existing_p.
3) Ejecuta (1) para cada elemento de p que todavía no exista. Si p ya existe, la función no hace nada (esta condición no se trata como un error).

Contenido

[editar]Parámetros

p - La ruta de acceso para el nuevo directorio a crear.
existing_p - La ruta de acceso a un directorio del que copiar los atributos.
ec - El parámetro de salida para informe de errores en la sobrecarga que no lanza excepciones.

[editar]Valor de retorno

true si se creó un directorio para el directorio al que p se resuelve, false de lo contrario.

[editar]Excepciones

1,3) La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con p como el primer argumento de la ruta de acceso y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.
2) La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con p como el primer argumento de la ruta de acceso, existing_p como el segundo argumento de la ruta de acceso, y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

[editar]Notas

La sobrecarga que conserva los atributos (2) se invoca implícitamente por copy() al copiar directorios recursivamente. Su equivalente en Boost.Filesystem es copy_directory (con el orden de los argumentos invertido).

[editar]Ejemplo

#include <iostream>#include <fstream>#include <cstdlib>#include <filesystem>namespace fs = std::filesystem;   int main(){ fs::current_path(fs::temp_directory_path()); fs::create_directories("entorno_aislado/1/2/a"); fs::create_directory("entorno_aislado/1/2/b"); fs::permissions("entorno_aislado/1/2/b", fs::perms::others_all, fs::perm_options::remove); fs::create_directory("entorno_aislado/1/2/c", "entorno_aislado/1/2/b");std::system("ls -l entorno_aislado/1/2");std::system("tree entorno_aislado"); fs::remove_all("entorno_aislado");}

Posible salida:

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 entorno_aislado └── 1 └── 2 ├── a ├── b └── c

[editar]Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2935 C++17 Es un error si el objetivo ya existe pero no es un directorio. No es un error.
LWG 3014 C++17 La sobrecarga error_code de create_directories está marcada como noexcept pero puede asignar memoria Se eliminó noexcept.
P1164R1 C++17 Fracaso en la creación causada por un archivo existente que no es un directorio no es un error. Se hizo un error.

[editar]Véase también

Crea un enlace simbólico.
(función)[editar]
(C++17)
Copia archivos o directorios.
(función)[editar]
(C++17)
Identifica los permisos del sistema de archivos.
(enum)[editar]
close