# std::filesystem::space

< cpp‎ | filesystem

定义于头文件 `<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; |  | (C++17 起)

确定路径名 `p` 定位于其上的文件系统信息，如同用 POSIX statvfs

植入并返回一个 space_info 类型的对象，从 POSIX `struct statvfs` 的如下成员设置：

- `space_info.capacity` 如同被设为 `f_blocks*f_frsize`
- `space_info.free` 被设为 `f_bfree*f_frsize`
- `space_info.available` 被设为 `f_bavail*f_frsize`
- 任何不能确定的成员被设为 static_cast<uintmax_t>(-1)

不抛出重载在错误时设所有成员为 static_cast<uintmax_t>(-1) 。

### 参数

p | - | 要检验的路径
ec | - | 不抛出重载的报告错误的输出参数

### 返回值

文件系统信息（ space_info 对象）

### 异常

不接受 std::error_code& 参数的重载在底层 OS API 错误时抛出 `filesystem_error` ，以第一 path 参数 `p` 和作为错误码参数的 OS 错误码构造。若 OS API 调用失败，则接受 std::error_code& 参数的重载设置该参数为 OS API 错误码，而若不出现错误则执行 ec.clear() 。若内存分配失败，则任何不标记为 `noexcept` 的重载可能抛出 std::bad_alloc 。

### 注意

space_info.available 可以小于或等于 space_info.free

### 示例

    #include <iostream>
    #include <filesystem>
    namespace fs = std::filesystem;
    int main()
    {
        fs::space_info devi = fs::space("/dev/null");
        fs::space_info tmpi = fs::space("/tmp");

        std::cout << ".        Capacity       Free      Available\n"
                  << "/dev:   " << devi.capacity << "   "
                  << devi.free << "   " << devi.available  << '\n'
                  << "/tmp: " << tmpi.capacity << " "
                  << tmpi.free << " " << tmpi.available  << '\n';
    }

可能的输出：

    .         Capacity       Free      Available
    /dev:   4175114240   4175110144   4175110144
    /tmp: 420651237376 411962273792 390570749952

### 参阅

space_info (C++17) | 关于文件系统上空闲及可用空间的信息 (类)