Defined in header <filesystem> | ||
struct space_info{ std::uintmax_t capacity; | (since C++17) | |
Represents the filesystem information as determined byfilesystem::space.
Contents |
capacity | total size of the filesystem, in bytes (public member object) |
free | free space on the filesystem, in bytes (public member object) |
available | free space available to a non-privileged process (may be equal or less thanfree)(public member object) |
operator== (C++20) | compares twospace_infos(function) |
friendbool operator==(const space_info&,const space_info&)=default; | (since C++20) | |
Checks ifcapacity,free andavailable of both arguments are equal respectively.
This function is not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup when std::filesystem::space_info is an associated class of the arguments.
The!= operator issynthesized fromoperator==.
#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(constexprstd::uintmax_t X(-1); si.capacity==0|| si.free==0|| si.available==0|| si.capacity== X|| si.free== X|| si.available== X)return100; std::uintmax_t unused_space= si.free, capacity= si.capacity;if(!is_privileged){conststd::uintmax_t privileged_only_space= si.free- si.available; unused_space-= privileged_only_space; capacity-= privileged_only_space;}conststd::uintmax_t used_space{capacity- unused_space};return100* used_space/ capacity;} void print_disk_space_info(autoconst& dirs,int width=14){(std::cout<<std::left).imbue(std::locale("en_US.UTF-8")); for(constauto s:{"Capacity","Free","Available","Use%","Dir"})std::cout<<"│ "<<std::setw(width)<< s<<' '; for(std::cout<<'\n';autoconst& 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(){constauto dirs={"/dev/null","/tmp","/home","/proc","/null"}; print_disk_space_info(dirs);}
Possible output:
│ 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) | determines available free space on the file system (function)[edit] |