namespace std::filesystem {
space_info space(const path& p); // (1)
space_info space(const path& p, std::error_code& ec) noexcept; // (2)
}
概要
指定されたパスの残り容量を取得する。
戻り値
- POSIX環境であれば、
statvfs()
関数を使用して、残り容量を取得する。space_info::capacity
の値はstatvfs::f_blocks * statvfs::f_frsize
space_info::free
の値はstatvfs::f_bfree * statvfs::f_frsize
space_info::available
の値はstatvfs::f_bavail * statvfs::f_frsize
- 容量を決定できない場合、
space_info
クラスのそのメンバ変数の値としては、static_cast<uintmax_t>(-1)
を設定する - 容量をすべて取得できなかった場合は、
- (1) :
std::filesystem::filesystem_error
例外を送出する - (2) :
ec
にエラー情報を設定し、space_info
クラスの全てのメンバ変数に、値としてstatic_cast<uintmax_t>(-1)
を設定する
- (1) :
例外
- (1) : 容量を取得できなかった場合は、
std::filesystem::filesystem_error
例外を送出する - (2) : 投げない
例
Linux環境の例
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
void print_space(const char* name, std::uintmax_t bytes)
{
std::uintmax_t mega_bytes = bytes / (1024 * 1024);
std::cout << name << " : " << bytes << "[B]"
<< " (" << mega_bytes << "[MB])" << std::endl;
}
int main()
{
fs::path p = "/";
fs::space_info info = fs::space(p);
std::cout << p << std::endl;
print_space("capacity", info.capacity);
print_space("free", info.free);
print_space("available", info.available);
}
xxxxxxxxxx
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
void print_space(const char* name, std::uintmax_t bytes)
{
std::uintmax_t mega_bytes = bytes / (1024 * 1024);
std::cout << name << " : " << bytes << "[B]"
<< " (" << mega_bytes << "[MB])" << std::endl;
}
int main()
{
fs::path p = "/";
fs::space_info info = fs::space(p);
std::cout << p << std::endl;
print_space("capacity", info.capacity);
print_space("free", info.free);
print_space("available", info.available);
}
出力例
"/"
capacity : 1048580096[B] (1000[MB])
free : 1048580096[B] (1000[MB])
available : 1048580096[B] (1000[MB])
仮想環境で実行しているため、空き容量が減っていない。実環境で動かせるようになったら出力例を更新する。
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: