std::filesystem::space_info
来自cppreference.com
< cpp | filesystem
| 在标头 <filesystem> 定义
|
||
| |
(C++17 起) | |
代表以 filesystem::space 确定的文件系统信息。
成员对象
capacity |
文件系统的总大小,以字节计 (公开成员对象) |
free |
文件系统的空闲空间,以字节计 (公开成员对象) |
available |
非特权进程可用的空闲空间(可以小于或等于 free) (公开成员对象) |
非成员函数
(C++20) |
比较两个 space_info (函数) |
operator==(std::filesystem::space_info)
| |
(C++20 起) | |
检查两个实参的 capacity、free 及 available 是否分别相等。
此函数对常规的无限定或有限定查找不可见,而只能在 std::filesystem::space_info 为实参的关联类时由实参依赖查找找到。
!= 运算符从 operator== 运算符合成。
示例
运行此代码
#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);
}
可能的输出:
│ 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
参阅
(C++17) |
确定文件系统上的可用空闲空间 (函数) |