সি ++ 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';
}