Namespaces
Variants

std::filesystem:: space_info

From cppreference.net
Definido en el encabezado <filesystem>
struct space_info {

std:: uintmax_t capacity ;
std:: uintmax_t free ;
std:: uintmax_t available ;

} ;
(desde C++17)

Representa la información del sistema de archivos determinada por filesystem::space .

Contenidos

Objetos miembro

capacity
tamaño total del sistema de archivos, en bytes
(public member object)
free
espacio libre en el sistema de archivos, en bytes
(public member object)
available
espacio libre disponible para un proceso no privilegiado (puede ser igual o menor que free )
(public member object)

Funciones no miembro

operator==
(C++20)
compara dos space_info s
(función)

operator== (std::filesystem::space_info)

friend bool operator == ( const space_info & , const space_info & ) = default ;
(desde C++20)

Comprueba si capacity , free y available de ambos argumentos son iguales respectivamente.

Esta función no es visible para la búsqueda no calificada ordinaria o la búsqueda calificada , y solo puede ser encontrada mediante búsqueda dependiente de argumentos cuando std::filesystem::space_info es una clase asociada de los argumentos.

El operador != es sintetizado a partir de operator== .

Ejemplo

#include <cstdint>
#include <filesystem>
#include <iostream>
#include <locale>
std::uintmax_t disk_usage_percent(const std::filesystem::space_info& si,
                                  bool is_privileged = false) noexcept
{
    if (constexpr std::uintmax_t X(-1);
        si.capacity == 0 || si.free == 0 || si.available == 0 ||
        si.capacity == X || si.free == X || si.available == X
    )
        return 100;
    std::uintmax_t unused_space = si.free, capacity = si.capacity;
    if (!is_privileged)
    {
        const std::uintmax_t privileged_only_space = si.free - si.available;
        unused_space -= privileged_only_space;
        capacity -= privileged_only_space;
    }
    const std::uintmax_t used_space{capacity - unused_space};
    return 100 * used_space / capacity;
}
void print_disk_space_info(auto const& dirs, int width = 14)
{
    (std::cout << std::left).imbue(std::locale("en_US.UTF-8"));
    for (const auto s : {"Capacity", "Free", "Available", "Use%", "Dir"})
        std::cout << "│ " << std::setw(width) << s << ' ';
    for (std::cout << '\n'; auto const& dir : dirs)
    {
        std::error_code ec;
        const std::filesystem::space_info si = std::filesystem::space(dir, ec);
        for (auto x : {si.capacity, si.free, si.available, disk_usage_percent(si)})
            std::cout << "│ " << std::setw(width) << static_cast<std::intmax_t>(x) << ' ';
        std::cout << "│ " << dir << '\n';
    }
}
int main()
{
    const auto dirs = {"/dev/null", "/tmp", "/home", "/proc", "/null"};
    print_disk_space_info(dirs);
}

Salida posible:

│ Capacity       │ Free           │ Available      │ Use%           │ Dir            
│ 84,417,331,200 │ 42,732,986,368 │ 40,156,028,928 │ 50             │ /dev/null
│ 84,417,331,200 │ 42,732,986,368 │ 40,156,028,928 │ 50             │ /tmp
│ -1             │ -1             │ -1             │ 100            │ /home
│ 0              │ 0              │ 0              │ 100            │ /proc
│ -1             │ -1             │ -1             │ 100            │ /null

Véase también

(C++17)
determina el espacio libre disponible en el sistema de archivos
(función)