C ++ 17 ช่วยstd::filesystem
เพิ่มความคล่องตัวให้กับงานต่างๆในไฟล์และไดเร็กทอรี ไม่เพียง แต่คุณสามารถรับขนาดไฟล์แอตทริบิวต์ของไฟล์ได้อย่างรวดเร็ว แต่ยังสร้างไดเร็กทอรีใหม่วนซ้ำผ่านไฟล์ทำงานกับวัตถุพา ธ
ไลบรารีใหม่มีฟังก์ชันสองอย่างที่เราสามารถใช้ได้:
std::uintmax_t std::filesystem::file_size( const std::filesystem::path& p );
std::uintmax_t std::filesystem::directory_entry::file_size() const;
ฟังก์ชั่นแรกคือฟังก์ชั่นฟรีstd::filesystem
, directory_entry
คนที่สองเป็นวิธีการในการ
แต่ละวิธียังมีการโอเวอร์โหลดเนื่องจากสามารถส่งข้อยกเว้นหรือส่งคืนรหัสข้อผิดพลาด (ผ่านพารามิเตอร์เอาต์พุต) ด้านล่างนี้คือรหัสรายละเอียดที่อธิบายกรณีที่เป็นไปได้ทั้งหมด
#include <chrono>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main(int argc, char* argv[])
{
try
{
const auto fsize = fs::file_size("a.out");
std::cout << fsize << '\n';
}
catch (const fs::filesystem_error& err)
{
std::cerr << "filesystem error! " << err.what() << '\n';
if (!err.path1().empty())
std::cerr << "path1: " << err.path1().string() << '\n';
if (!err.path2().empty())
std::cerr << "path2: " << err.path2().string() << '\n';
}
catch (const std::exception& ex)
{
std::cerr << "general exception: " << ex.what() << '\n';
}
std::error_code ec{};
auto size = std::filesystem::file_size("a.out", ec);
if (ec == std::error_code{})
std::cout << "size: " << size << '\n';
else
std::cout << "error when accessing test file, size is: "
<< size << " message: " << ec.message() << '\n';
}