یک برنامه 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 نیز هست).

توسط پژوهشگر در 221 روز قبل ساعت 01:11
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 221 روز قبل ساعت 14:16

این کار با استفاده از 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 اضافه شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری