std::filesystem::file_size
Definido en el archivo de encabezado <filesystem> | ||
std::uintmax_t file_size(conststd::filesystem::path& p ); std::uintmax_t file_size(conststd::filesystem::path& p, | (1) | (desde C++17) |
Si p
no existe, reporta un error.
Para un archivo regular p
, devuelve el tamaño determinado como si se leyera el miembro st_size
de la estructura stat
de POSIX (se siguen los enlaces simbólicos).
El resultado de intentar determinar el tamaño de un directorio (así como cualquier otro archivo que no sea un archivo normal o un enlace simbólico) está definido por la implementación.
La sobrecarga que no lanza excepciones devuelve static_cast<std::uintmax_t>(-1) si ocurren errores.
Contenido |
[editar]Parámetros
p | - | La ruta de acceso a examinar. |
ec | - | El parámetro de salida para informe de errores en la sobrecarga que no lanza excepciones. |
[editar]Valor de retorno
El tamaño del archivo, en bytes.
[editar]Excepciones
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.
[editar]Ejemplo
#include <cmath>#include <filesystem>#include <fstream>#include <iostream>namespace fs = std::filesystem; struct LegiblePorHumanos {std::uintmax_t size{};private:friendstd::ostream& operator<<(std::ostream& os, LegiblePorHumanos hr){int i{};double mantissa = hr.size;for(; mantissa >=1024.; mantissa /=1024., ++i){} mantissa =std::ceil(mantissa *10.)/10.; os << mantissa <<"BKMGTPE"[i];return i ==0? os : os <<"B ("<< hr.size<<')';}}; int main(int, charconst* argv[]){ fs::path ejemplo ="ejemplo.bin"; fs::path p = fs::current_path()/ ejemplo;std::ofstream(p).put('a');// crear archivo de tamaño 1std::cout<< ejemplo <<" tamaño = "<< fs::file_size(p)<<'\n'; fs::remove(p); p = argv[0];std::cout<< p <<" tamaño = "<< LegiblePorHumanos{fs::file_size(p)}<<'\n'; try{std::cout<<"Intentar obtener el tamaño de un directorio:\n"; fs::file_size("/dev");}catch(fs::filesystem_error& e){std::cout<< e.what()<<'\n';} std::error_code ec;for(fs::path bin:{"gato", "perro"}){ bin ="/bin"/bin;std::uintmax_t size = fs::file_size(bin, ec);if(ec){std::cout<< bin <<" : "<< ec.message()<<'\n';}else{std::cout<< bin <<" tamaño = "<< LegiblePorHumanos{size}<<'\n';}}}
Posible salida:
"ejemplo.bin" tamaño = 1 "./a.out" tamaño = 22KB (22512) Intentar obtener el tamaño de un directorio: error del sistema de archivos: no se puede obtener el tamaño del archivo: Es un directorio [/dev] "/bin/gato" tamaño = 50.9KB (52080) "/bin/perro" : No existe tal archivo o directorio
[editar]Véase también
(C++17) | Cambia el tamaño de un archivo regular por truncamiento o relleno con ceros. (función) |
(C++17) | Determina el espacio libre disponible en el sistema de archivos. (función) |
Devuelve el tamaño del archivo al que se refiere la entrada de directorio. (función miembro pública de std::filesystem::directory_entry ) |