العمل مع نظام الملفات في لغة C++: للمبتدئين
العمل مع نظام الملفات هو أحد المهام الأساسية لأي مبرمج. في لغة C++، توجد عدة طرق للتفاعل مع الملفات والمجلدات: بدءًا من التدفقات الكلاسيكية fstream وصولاً إلى std::filesystem الحديث (C++17). في هذه المقالة، سنشرح العمليات الأساسية: قراءة وكتابة الملفات، التحقق من وجودها، إنشاء وحذف المجلدات، بالإضافة إلى التنقل في نظام الملفات. جميع الأمثلة البرمجية مكتوبة بلغة C++ ومناسبة للمبتدئين.
1. أساسيات العمل مع الملفات عبر fstream
الفئات ifstream (إدخال من ملف)، ofstream (إخراج إلى ملف)، و fstream (إدخال/إخراج) هي أدوات أساسية للعمل مع الملفات النصية والثنائية. توجد في ملف الرأس <fstream>.
قراءة من ملف
لقراءة البيانات من ملف، قم بإنشاء كائن ifstream وافتح الملف. تأكد من وجود الملف، وإلا سيكون التدفق في حالة خطأ.
#include <iostream>#include <fstream>#include <string>
int main() { std::ifstream file("example.txt"); if (!file.is_open()) { std::cerr << "خطأ في فتح الملف"; return 1; }
std::string line; while (std::getline(file, line)) { std::cout << line << std::endl; }
file.close(); return 0;}الكتابة إلى ملف
للكتابة، استخدم ofstream. إذا لم يكن الملف موجودًا، سيتم إنشاؤه. إذا كان موجودًا، سيتم استبدال المحتوى (ما لم يتم تحديد العلم std::ios::app).
#include <fstream>
int main() { std::ofstream file("output.txt"); if (!file.is_open()) { std::cerr << "فشل إنشاء الملف"; return 1; }
file << "Hello, world!"; file << "نظام الملفات C++";
file.close(); return 0;}إضافة بيانات إلى نهاية الملف
استخدم العلم std::ios::app (إلحاق) لإضافة بيانات إلى النهاية دون حذف البيانات السابقة.
std::ofstream file("log.txt", std::ios::app);file << "إدخال جديد";file.close();2. العمل مع المجلدات ونظام الملفات (C++17)
بدءًا من C++17، تتضمن المكتبة القياسية ملف الرأس <filesystem> الذي يوفر واجهة مريحة ومتعددة المنصات للعمل مع نظام الملفات. لاستخدامه، أضف علم التجميع -std=c++17 (أو أعلى) وقم بتضمين <filesystem>.
التحقق من وجود ملف أو مجلد
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { fs::path p = "example.txt"; if (fs::exists(p)) { std::cout << "الملف موجود"; std::cout << "الحجم: " << fs::file_size(p) << " بايت"; } else { std::cout << "الملف غير موجود"; } return 0;}إنشاء وحذف المجلدات
#include <filesystem>namespace fs = std::filesystem;
int main() { // إنشاء مجلد واحد if (fs::create_directory("my_folder")) { std::cout << "تم إنشاء المجلد"; }
// إنشاء مجلدات متداخلة fs::create_directories("a/b/c");
// حذف مجلد فارغ fs::remove("my_folder");
// حذف مجلد بكل محتوياته (بحذر!) // fs::remove_all("a");
return 0;}التكرار على محتويات مجلد
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { std::string path = "."; for (const auto& entry : fs::directory_iterator(path)) { if