یک برنامه C++ بنویسید که با استفاده از هدر یک دایرکتوری مشخص (بهصورت پارامتر) را بهصورت بازگشتی جستجو کند و تمام فایلهایی را که در N روز گذشته تغییر نکردهاند فهرست کرده و مسیر و اندازهٔ هر فایل و مجموع اندازهٔ این فایلها را نمایش دهد.
4.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:11 0.0
برای حل این مسئله از std::filesystem::recursive_directory_iterator برای پیمایش بازگشتی، std::filesystem::is_regular_file برای فیلتر کردن فایلها، std::filesystem::last_write_time برای زمان آخرین تغییر و std::filesystem::file_size برای گرفتن اندازه استفاده کنید. زمان کنونی را با std::chrono::system_clock بگیرید و با تبدیل last_write_time به یک time_point قابل مقایسه (مثلاً با std::chrono::file_clock::to_sys در پیادهسازیهای C++20 یا روشهای معادل) اختلاف روزها را محاسبه کنید؛ سپس فایلهایی که قدیمیتر از N روز هستند را لیست و اندازهشان را جمع بزنید. نکات: ورودیها را از خط فرمان بگیرید، استثناها را با try/catch مدیریت کنید و برای کامپایل از -std=c++17 یا بالاتر استفاده کنید (در برخی کامپایلرها نیاز به لینک کردن stdc++fs نیز هست).
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
این کار با استفاده از std::filesystem امکانپذیر است؛ از recursive_directory_iterator برای پیمایش استفاده کنید و فایلهای عادی را فیلتر کنید. برای تشخیص اینکه آیا فایل بهمدت N روز تغییر نکرده، زمان آخرین تغییر را از last_write_time بگیرید و آن را با زمان فعلی مقایسه کنید؛ اگر قدیمیتر از N روز باشد، به فهرست اضافه کنید. در C++17 به بعد، تبدیل file_time_type به زمان قابل مقایسه با system_clock ممکن است نیاز به راهحلهای اضافی یا استفاده از روشهای مانند clock::to_sys در پیادهسازیهای C++20 یا Boost داشته باشد. همچنین ورودی را از خط فرمان بگیرید و استثناها را با بلوک try/catch مدیریت کنید و در برخی کامپایلرها برای لینک کردن استاندارد_fs، لازم است -lstdc++fs اضافه شود.
گزارش