std::filesystem:: file_size
|
Definido en el encabezado
<filesystem>
|
||
|
std::
uintmax_t
file_size
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (desde C++17) |
|
std::
uintmax_t
file_size
(
const
std::
filesystem
::
path
&
p,
std:: error_code & ec ) noexcept ; |
(2) | (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 obtenida mediante POSIX
stat
(los enlaces simbólicos se siguen).
El resultado de intentar determinar el tamaño de un directorio (así como de cualquier otro archivo que no sea un archivo regular o un enlace simbólico) está definido por la implementación.
La sobrecarga que no lanza excepciones devuelve static_cast < std:: uintmax_t > ( - 1 ) en caso de errores.
Contenidos |
Parámetros
| p | - | ruta a examinar |
| ec | - | parámetro de salida para reporte de errores en la sobrecarga no lanzadora |
Valor de retorno
El tamaño del archivo, en bytes.
Excepciones
Cualquier sobrecarga no marcada como
noexcept
puede lanzar
std::bad_alloc
si la asignación de memoria falla.
Ejemplo
#include <cmath> #include <filesystem> #include <fstream> #include <iostream> namespace fs = std::filesystem; struct HumanReadable { std::uintmax_t size{}; private: friend std::ostream& operator<<(std::ostream& os, HumanReadable hr) { int o{}; double mantissa = hr.size; for (; mantissa >= 1024.; mantissa /= 1024., ++o); os << std::ceil(mantissa * 10.) / 10. << "BKMGTPE"[o]; return o ? os << "B (" << hr.size << ')' : os; } }; int main(int, char const* argv[]) { fs::path example = "example.bin"; fs::path p = fs::current_path() / example; std::ofstream(p).put('a'); // create file of size 1 std::cout << example << " size = " << fs::file_size(p) << '\n'; fs::remove(p); p = argv[0]; std::cout << p << " size = " << HumanReadable{fs::file_size(p)} << '\n'; try { std::cout << "Attempt to get size of a directory:\n"; [[maybe_unused]] auto x_x = fs::file_size("/dev"); } catch (fs::filesystem_error& e) { std::cout << e.what() << '\n'; } for (std::error_code ec; fs::path bin : {"cat", "mouse"}) { bin = "/bin"/bin; if (const std::uintmax_t size = fs::file_size(bin, ec); ec) std::cout << bin << " : " << ec.message() << '\n'; else std::cout << bin << " size = " << HumanReadable{size} << '\n'; } }
Salida posible:
"example.bin" size = 1 "./a.out" size = 22KB (22512) Attempt to get size of a directory: filesystem error: cannot get file size: Is a directory [/dev] "/bin/cat" size = 50.9KB (52080) "/bin/mouse" : No such file or directory
Véase también
|
(C++17)
|
cambia el tamaño de un archivo regular mediante 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
)
|