std::filesystem::directory_entry:: status, std::filesystem::directory_entry:: symlink_status
|
std::
filesystem
::
file_status
status
(
)
const
;
|
(1) | (desde C++17) |
|
std::
filesystem
::
file_status
status
(
std::
error_code
&
ec
)
const
noexcept
;
|
(2) | (desde C++17) |
|
std::
filesystem
::
file_status
symlink_status
(
)
const
;
|
(3) | (desde C++17) |
|
std::
filesystem
::
file_status
symlink_status
(
std::
error_code
&
ec
)
const
noexcept
;
|
(4) | (desde C++17) |
Contenidos |
Parámetros
| ec | - | parámetro de salida para reporte de errores en la sobrecarga que no lanza excepciones |
Valor de retorno
El estado del archivo referenciado por la entrada.
Excepciones
Cualquier sobrecarga no marcada como
noexcept
puede lanzar
std::bad_alloc
si la asignación de memoria falla.
Notas
Muchas APIs de bajo nivel del sistema operativo para recorrido de directorios recuperan atributos de archivo junto con la siguiente entrada del directorio. Los constructores y las funciones miembro no constantes de std::filesystem::directory_iterator almacenan estos atributos, si los hay, en el std::filesystem::directory_entry apuntado sin llamar a directory_entry::refresh , lo que hace posible examinar los atributos de las entradas del directorio mientras se están iterando, sin realizar llamadas adicionales al sistema.
Ejemplo
#include <cstdio> #include <cstring> #include <filesystem> #include <fstream> #include <iostream> #include <sys/socket.h> #include <sys/stat.h> #include <sys/un.h> #include <unistd.h> namespace fs = std::filesystem; void demo_status(const fs::path& p, fs::file_status s) { std::cout << p; // alternativa: switch(s.type()) { case fs::file_type::regular: ...} if (fs::is_regular_file(s)) std::cout << " is a regular file\n"; if (fs::is_directory(s)) std::cout << " is a directory\n"; if (fs::is_block_file(s)) std::cout << " is a block device\n"; if (fs::is_character_file(s)) std::cout << " is a character device\n"; if (fs::is_fifo(s)) std::cout << " is a named IPC pipe\n"; if (fs::is_socket(s)) std::cout << " is a named IPC socket\n"; if (fs::is_symlink(s)) std::cout << " is a symlink\n"; if (!fs::exists(s)) std::cout << " does not exist\n"; } int main() { // crear archivos de diferentes tipos fs::create_directory("sandbox"); fs::create_directory("sandbox/dir"); std::ofstream{"sandbox/file"}; // crear archivo regular fs::create_symlink("file", "sandbox/symlink"); mkfifo("sandbox/pipe", 0644); sockaddr_un addr; addr.sun_family = AF_UNIX; std::strcpy(addr.sun_path, "sandbox/sock"); int fd = socket(PF_UNIX, SOCK_STREAM, 0); bind(fd, reinterpret_cast<sockaddr*>(&addr), sizeof addr); // demostrar diferentes accesores de estado for (auto it{fs::directory_iterator("sandbox")}; it != fs::directory_iterator(); ++it) demo_status(*it, it->symlink_status()); // usar estado en caché de la entrada del directorio demo_status("/dev/null", fs::status("/dev/null")); // llamadas directas a status demo_status("/dev/sda", fs::status("/dev/sda")); demo_status("sandbox/no", fs::status("/sandbox/no")); // limpieza (preferir eliminadores personalizados basados en std::unique_ptr) close(fd); fs::remove_all("sandbox"); }
Salida posible:
"sandbox/file" is a regular file "sandbox/dir" is a directory "sandbox/pipe" is a named IPC pipe "sandbox/sock" is a named IPC socket "sandbox/symlink" is a symlink "/dev/null" is a character device "/dev/sda" is a block device "sandbox/no" does not exist
Véase también
|
actualiza los atributos de archivo en caché
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un objeto del sistema de archivos existente
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un dispositivo de bloques
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un dispositivo de caracteres
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un directorio
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a una tubería con nombre
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un archivo
otro
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un archivo regular
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un socket IPC con nombre
(función de miembro pública) |
|
|
verifica si la entrada de directorio hace referencia a un enlace simbólico
(función de miembro pública) |
|
|
devuelve el tamaño del archivo al que hace referencia la entrada de directorio
(función de miembro pública) |
|
|
devuelve el número de enlaces físicos que hacen referencia al archivo al que apunta la entrada de directorio
(función de miembro pública) |
|
|
obtiene el tiempo de la última modificación de datos del archivo al que hace referencia la entrada de directorio
(función de miembro pública) |