| Classes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| File types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <filesystem> | ||
std::uintmax_t file_size(conststd::filesystem::path& p); | (1) | (since C++17) |
std::uintmax_t file_size(conststd::filesystem::path& p, std::error_code& ec)noexcept; | (2) | (since C++17) |
Ifp does not exist, reports an error.
For a regular filep, returns the size determined as if by reading thest_size member of the structure obtained by POSIXstat (symlinks are followed).
The result of attempting to determine the size of a directory (as well as any other file that is not a regular file or a symlink) is implementation-defined.
The non-throwing overload returnsstatic_cast<std::uintmax_t>(-1) on errors.
Contents |
| p | - | path to examine |
| ec | - | out-parameter for error reporting in the non-throwing overload |
The size of the file, in bytes.
Any overload not markednoexcept may throwstd::bad_alloc if memory allocation fails.
#include <cmath>#include <filesystem>#include <fstream>#include <iostream>namespace fs= std::filesystem; struct HumanReadable{std::uintmax_t size{}; private:friendstd::ostream& operator<<(std::ostream& os, HumanReadable hr){int o{};double mantissa= hr.size;for(; mantissa>=1024.; mantissa/=1024.,++o); os<<std::ceil(mantissa*10.)/10.<<"BKMGTPE"[o];return o? os<<"B ("<< hr.size<<')': os;}}; int main(int,charconst* argv[]){ fs::path example="example.bin"; fs::path p= fs::current_path()/ example;std::ofstream(p).put('a');// create file of size 1std::cout<< example<<" size = "<< fs::file_size(p)<<'\n'; fs::remove(p); p= argv[0];std::cout<< p<<" size = "<< HumanReadable{fs::file_size(p)}<<'\n'; try{std::cout<<"Attempt to get size of a directory:\n";[[maybe_unused]]auto x_x= fs::file_size("/dev");}catch(fs::filesystem_error& e){std::cout<< e.what()<<'\n';} for(std::error_code ec; fs::path bin:{"cat","mouse"}){ bin="/bin"/bin;if(conststd::uintmax_t size= fs::file_size(bin, ec); ec)std::cout<< bin<<" : "<< ec.message()<<'\n';elsestd::cout<< bin<<" size = "<< HumanReadable{size}<<'\n';}}
Possible output:
"example.bin" size = 1"./a.out" size = 22KB (22512)Attempt to get size of a directory:filesystem error: cannot get file size: Is a directory [/dev]"/bin/cat" size = 50.9KB (52080)"/bin/mouse" : No such file or directory
(C++17) | changes the size of a regular file by truncation or zero-fill (function)[edit] |
(C++17) | determines available free space on the file system (function)[edit] |
| returns the size of the file to which the directory entry refers (public member function of std::filesystem::directory_entry)[edit] |