C ++ 17 menghadirkan std::filesystem
yang menyederhanakan banyak tugas pada file dan direktori. Tidak hanya Anda dapat dengan cepat mendapatkan ukuran file, atributnya, tetapi juga membuat direktori baru, melakukan iterasi melalui file, bekerja dengan objek jalur.
Perpustakaan baru memberi kita dua fungsi yang bisa kita gunakan:
std::uintmax_t std::filesystem::file_size( const std::filesystem::path& p );
std::uintmax_t std::filesystem::directory_entry::file_size() const;
Fungsi pertama adalah fungsi bebas di std::filesystem
, yang kedua adalah metode masuk directory_entry
.
Setiap metode juga memiliki kelebihan beban, karena dapat memunculkan pengecualian atau mengembalikan kode kesalahan (melalui parameter keluaran). Di bawah ini adalah kode detail yang menjelaskan semua kemungkinan kasus.
#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';
}
// using error_code
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';
}