From cppreference.com
Defined in header
std::filesystem::space_infospace(conststd::filesystem::path&p); (1) (since C++17)std::filesystem::space_infospace(conststd::filesystem::path&p,std::error_code&ec)noexcept; (2) (since C++17)Determines the information about the filesystem on which the pathname p is located, as if by POSIX
.
Populates and returns an object of type
, set from the members of the POSIX structstatvfs as follows:
is set as if by f_blocks*f_frsize.
is set to f_bfree*f_frsize.
is set to f_bavail*f_frsize.
Any member that could not be determined is set to static_cast<std::uintmax_t>(-1).
The non-throwing overload sets all members to static_cast<std::uintmax_t>(-1) on error.
Parameters
p - path to examine ec - out-parameter for error reporting in the non-throwing overload Return value
The filesystem information (a
object).
Exceptions
Any overload not marked noexcept may throw
if memory allocation fails.
1) Throws
std::filesystem::filesystem_error
on underlying OS API errors, constructed with p as the first path argument and the OS error code as the error code argument.
2) Sets a std::error_code& parameter to the OS API error code if an OS API call fails, and executes ec.
() if no errors occur.
Notes
may be less than
.
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)
information about free and available space on the filesystem
(class)