Namespaces
Variants

std::filesystem::directory_entry:: file_size

From cppreference.net
std:: uintmax_t file_size ( ) const ;
(1) (desde C++17)
std:: uintmax_t file_size ( std:: error_code & ec ) const noexcept ;
(2) (desde C++17)

Si el tamaño del archivo está almacenado en caché en esta directory_entry , devuelve el valor almacenado en caché. De lo contrario, devuelve:

2) std:: filesystem :: file_size ( ruta ( ) , ec ) .

Contenidos

Parámetros

ec - parámetro de salida para reporte de errores en la sobrecarga que no lanza excepciones

Valor de retorno

El tamaño del objeto del sistema de archivos referenciado.

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

1) Lanza std::filesystem::filesystem_error en errores de la API del sistema operativo subyacente, construido con p como primer argumento de ruta y el código de error del sistema operativo como argumento de código de error.
2) Establece un parámetro std:: error_code & al 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.

Ejemplo

Imprime la lista de archivos en un directorio dado junto con sus tamaños en formato legible para humanos.

#include <cmath>
#include <cstdint>
#include <filesystem>
#include <iostream>
struct HumanReadable
{
    std::uintmax_t size{};
    template<typename Os> friend Os& operator<<(Os& os, HumanReadable hr)
    {
        int i{};
        double mantissa = hr.size;
        for (; mantissa >= 1024.0; mantissa /= 1024.0, ++i)
        {}
        os << std::ceil(mantissa * 10.0) / 10.0 << i["BKMGTPE"];
        return i ? os << "B (" << hr.size << ')' : os;
    }
};
int main(int argc, const char* argv[])
{
    const auto dir = argc == 2 ? std::filesystem::path{argv[1]}
                               : std::filesystem::current_path();
    for (std::filesystem::directory_entry const& entry : 
         std::filesystem::directory_iterator(dir))
        if (entry.is_regular_file())
            std::cout << entry.path().filename() << " size: "
                      << HumanReadable{entry.file_size()} << '\n';
}

Salida posible:

"boost_1_73_0.tar.bz2" size: 104.2MB (109247910)
"CppCon 2018 - Jon Kalb “Copy Elision”.mp4" size: 15.7MB (16411990)
"cppreference-doc-20190607.tar.xz" size: 6.3MB (6531336)
"hana.hpp" size: 6.7KB (6807)

Véase también

(C++17)
devuelve el tamaño de un archivo
(función)