Espacios de nombres
Variantes
Acciones

std::filesystem::space

De cppreference.com
 
 
 
Definido en el archivo de encabezado <filesystem>
std::filesystem::space_info space(const std::filesystem::path& p);

std::filesystem::space_info space(const std::filesystem::path& p,

                                  std::error_code& ec) noexcept;
(desde C++17)

Determina la información sobre el sistema de archivos en el que se encuentra el nombre de ruta de acceso p, como si fuera por la función POSIX statvfs.

Completa y devuelve un objeto tipo filesystem::space_info, establecido de los miembros de la estructura POSIX struct statvfs de la siguiente manera:

La sobrecarga que no lanza excepciones establece todos los miembros en static_cast<std::uintmax_t>(-1) si ocurre un error.

Contenido

[editar] Parámetros

p - La ruta de acceso a examinar.
ec - El parámetro de salida para reportar errores en la sobrecarga que no lanza.

[editar] Valor de retorno

La información del sistema de archivos (un objeto filesystem::space_info).

[editar] 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.

[editar] Notas

space_info.available puede ser menor que space_info.free.

[editar] Ejemplo

#include <iostream>
#include <filesystem>
#include <cstdint>
 
void imprimir_info_espacio(auto const& dirs, int width = 14)
{
    std::cout << std::left;
    for (const auto s : {"Capacidad", "Libre", "Disponible", "Dir"})
        std::cout << "│ " << std::setw(width) << s << ' ';
    std::cout << '\n';
    std::error_code ec;
    for (auto const& dir : dirs) {
        const std::filesystem::space_info si = std::filesystem::space(dir, ec);
        std::cout
            << "│ " << std::setw(width) << static_cast<std::intmax_t>(si.capacity) << ' '
            << "│ " << std::setw(width) << static_cast<std::intmax_t>(si.free) << ' '
            << "│ " << std::setw(width) << static_cast<std::intmax_t>(si.available) << ' '
            << "│ " << dir << '\n';
    }
}
 
int main()
{
    const auto dirs = { "/dev/null", "/tmp", "/home", "/null" };
    imprimir_info_espacio(dirs);
}

Posible salida:

│ Capacidad      │ Libre          │ Disponible     │ Dir
│ 8342851584     │ 8342851584     │ 8342851584     │ /dev/null
│ 12884901888    │ 3045265408     │ 3045265408     │ /tmp
│ 250321567744   │ 37623181312    │ 25152159744    │ /home
│ -1             │ -1             │ -1             │ /null

[editar] Véase también

Información sobre el espacio libre y disponible en el sistema de archivos.
(clase) [editar]