كيفية التحقق بسرعة من وجود ملف في C++ (C++11/14/17)؟
مرحباً بالجميع! أكتب بلغة C++ منذ حوالي عام، لكني حتى الآن لم أجد طريقة أفضل بشكل قاطع للتحقق مما إذا كان الملف موجوداً على القرص. المشكلة أنني بحاجة للقيام بذلك بشكل متكرر جداً — في حلقة أعالج مئات الملفات، وكل ملي ثانية مهمة.
حالياً أستخدم هذا الكود:
#include <fstream>
bool fileExists(const std::string& filename) {
std::ifstream f(filename.c_str());
return f.good();
}
إنه يعمل، لكني أشك في أن هذا ليس الخيار الأسرع، لأنه يفتح الملف بالكامل. جربت أيضاً استخدام `stat()`:
#include <sys/stat.h>
bool fileExists(const std::string& name) {
struct stat buffer;
return (stat(name.c_str(), &buffer) == 0);
}
لكن هذا كود يعتمد على المنصة (Windows لا يدعم `stat` بدون وحدات ماكرو إضافية). سمعت أنه في C++17 ظهر `std::filesystem`، لكني لست متأكداً من مدى سرعته.
السؤال: ما هي الطريقة الأسرع والأكثر