std::filesystem::directory_entry::file_size

来自cppreference.com
 
 
 
 
std::uintmax_t file_size()const;
(1) (C++17 起)
std::uintmax_t file_size(std::error_code& ec )constnoexcept;
(2) (C++17 起)

若文件大小缓存于此 directory_entry,则返回缓存值。否则各返回:

目录

[编辑]参数

ec - 不抛出重载中报告错误的输出形参

[编辑]返回值

所指代文件系统对象的大小

[编辑]异常

若内存分配失败,则任何不标记为 noexcept 的重载可能抛出 std::bad_alloc

1) 抛出 std::filesystem::filesystem_error,构造时以 p 为第一路径实参并以OS 错误码为错误码实参。
2) 若 OS API 调用失败,则设置 std::error_code& 为 OS API 错误码,而未发生错误时则执行 ec.clear()

[编辑]示例

以下程序以人类可读的形式打印出给定目录中的文件以及其大小。

#include <cmath>#include <cstdint>#include <filesystem>#include <iostream>   struct HumanReadable {std::uintmax_t size{};   template<typename Os>friend Os& operator<<(Os& os, HumanReadable hr){int i{};double mantissa = hr.size;for(; mantissa >=1024.0; mantissa /=1024.0, ++i){} os <<std::ceil(mantissa *10.0)/10.0<< i["BKMGTPE"];return i ? os <<"B ("<< hr.size<<')': os;}};   int main(int argc, constchar* argv[]){constauto dir = argc ==2?std::filesystem::path{argv[1]}:std::filesystem::current_path();   for(std::filesystem::directory_entryconst& entry :std::filesystem::directory_iterator(dir))if(entry.is_regular_file())std::cout<< entry.path().filename()<<" size: "<< HumanReadable{entry.file_size()}<<'\n';}

可能的输出:

"boost_1_73_0.tar.bz2" size: 104.2MB (109247910) "CppCon 2018 - Jon Kalb “Copy Elision”.mp4" size: 15.7MB (16411990) "cppreference-doc-20190607.tar.xz" size: 6.3MB (6531336) "hana.hpp" size: 6.7KB (6807)

[编辑]参阅

(C++17)
返回文件的大小
(函数)[编辑]
close