Espacios de nombres
Variantes

std::filesystem::directory_entry::file_size

De cppreference.com
 
 
 
 
std::uintmax_t file_size() const;
std::uintmax_t file_size( std::error_code& ec ) const noexcept;
(desde C++17)

Si el tamaño del archivo está almacenado en caché en esta entrada de directorio, devuelve el valor almacenado en caché. De lo contrario, devuelve std::filesystem::file_size(path()) o std::filesystem::file_size(path(), ec), respectivamente.

Parámetros

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

Valor de retorno

El tamaño del objeto del sistema de archivos al que se hace referencia.

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.

Ejemplo

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

#include <filesystem>
#include <iostream>
#include <cstdint>
#include <cmath>

struct LegiblePorHumanos {
    std::uintmax_t size {};

    template <typename Os> friend Os& operator<< (Os& os, LegiblePorHumanos hr)
    {
        int i{};
        double mantisa = hr.size;
        for (; mantisa >= 1024.; ++i) {
            mantisa /= 1024.;
        }
        mantisa = std::ceil(mantisa * 10.) / 10.;
        os << mantisa << "BKMGTPE"[i];
        return i == 0 ? os : os << "B (" << hr.size << ')';
    }
};

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() << " tamaño: "
                      << LegiblePorHumanos{entry.file_size()} << '\n';
        }
    }
}

Posible salida:

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

Véase también

(C++17)
Devuelve el tamaño de un archivo.
(función) [editar]