From cppreference.com
structspace_info{std::uintmax_tcapacity;std::uintmax_tfree;std::uintmax_tavailable;};(since C++17)Represents the filesystem information as determined by
.
Member objects
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 than free)
(public member object)Non-member functions
(C++20)
compares two space_infos
(function)operator==(std::filesystem::space_info)
friendbooloperator==(constspace_info&,constspace_info&)=default;(since C++20)Checks if capacity, free and available of both arguments are equal respectively.
This function is not visible to ordinary
or
, and can only be found by
when std::filesystem::space_info is an associated class of the arguments.
The != operator is
from operator==.
Example
Run this code
#include<cstdint>#include<filesystem>#include<iostream>#include<locale>std::uintmax_tdisk_usage_percent(conststd::filesystem::space_info&si,boolis_privileged=false)noexcept{if(constexprstd::uintmax_tX(-1);si.capacity==0||si.free==0||si.available==0||si.capacity==X||si.free==X||si.available==X)return100;std::uintmax_tunused_space=si.free,capacity=si.capacity;if(!is_privileged){conststd::uintmax_tprivileged_only_space=si.free-si.available;unused_space-=privileged_only_space;capacity-=privileged_only_space;}conststd::uintmax_tused_space{capacity-unused_space};return100*used_space/capacity;}voidprint_disk_space_info(autoconst&dirs,intwidth=14){(std::cout<<std::left).imbue(std::locale("en_US.UTF-8"));for(constautos:{"Capacity","Free","Available","Use%","Dir"})std::cout<<"│ "<<std::setw(width)<<s<<' ';for(std::cout<<'\n';autoconst&dir:dirs){std::error_codeec;conststd::filesystem::space_infosi=std::filesystem::space(dir,ec);for(autox:{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';}}intmain(){constautodirs={"/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 See also
(C++17)
determines available free space on the file system
(function)