Namensräume
Varianten
Aktionen

std::filesystem::space_info

Von cppreference.com
 
 
 
Definiert in Header <filesystem>
struct space_info {

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

};
(seit C++17)

Stellt die Dateisysteminformationen dar, wie sie von filesystem::space ermittelt werden.

Inhalt

[bearbeiten] Member-Objekte

capacity
Gesamtgröße des Dateisystems in Bytes
(öffentliches Mitgliedsobjekt)
free
Freier Speicherplatz auf dem Dateisystem in Bytes
(öffentliches Mitgliedsobjekt)
verfügbar
Freier Speicherplatz für einen nicht privilegierten Prozess (kann gleich oder kleiner als free sein)
(öffentliches Mitgliedsobjekt)

[bearbeiten] Nicht-Member-Funktionen

operator==
(C++20)
vergleicht zwei space_infos
(Funktion)

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

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

Prüft, ob capacity, free und available beider Argumente jeweils gleich sind.

Diese Funktion ist für normale unqualifizierte oder qualifizierte Suchen nicht sichtbar und kann nur durch argumentabhängige Suche gefunden werden, wenn std::filesystem::space_info eine zugehörige Klasse der Argumente ist.

Der Operator != wird aus operator== synthetisiert.

[bearbeiten] Beispiel

#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);
}

Mögliche Ausgabe

│ 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

[bearbeiten] Siehe auch

ermittelt den verfügbaren freien Speicherplatz auf dem Dateisystem
(Funktion) [bearbeiten]