الملفات في لغة C++: من المبتدئ إلى المحترف في 20 دقيقة
\n\nتخيل أن برنامجك هو طباخ ماهر. إنه يعرف كيف يطبخ، لكن جميع المكونات يجب إحضارها يدويًا، والوصفات تختفي بعد كل استخدام. هذا لا يبدو جيدًا، أليس كذلك؟ لهذا السبب يجب على أي مطور يحترم نفسه أن يعرف كيفية العمل مع الملفات ونظام الملفات. في لغة C++، هذا ليس مجرد "ممكن" - بل هو الأساس الذي بدونه ستشعر بعدم الثقة كمبرمج.
\n\nاليوم سنشرح العمل مع الملفات في لغة C++ بحيث لا تقوم فقط بنسخ الكود، بل تفهم حقًا ما يحدث تحت الغطاء. بدون محاضرات مملة، مع أمثلة حية ونصائح عملية. هيا بنا!
\n\nالتدفقات - أساس العمل مع الملفات في C++
\n\nفي لغة C++، يتم بناء العمل مع الملفات حول التدفقات. إذا كنت تعرف بالفعل cout و cin، فاعتبر أن نصف العمل قد تم. تعمل تدفقات الملفات بنفس المبدأ، فقط بدلاً من الشاشة أو لوحة المفاتيح، يتم إرسال البيانات إلى ملف أو تحميلها منه.
اللاعبون الرئيسيون في الميدان:
\n\n- \n
ifstream- للقراءة من ملف (input file stream). \n ofstream- للكتابة في ملف (output file stream). \n fstream- تدفق شامل للقراءة والكتابة. \n
كل هذه الفئات موجودة في ملف الرأس <fstream>. لا تنس تضمينه، وإلا سيغضب منك المترجم.
كيف تفتح ملفًا دون أن تصاب بالجنون
\n\nفتح ملف في C++ يشبه فتح باب: تحتاج إلى معرفة أين تذهب ولماذا. دعنا نلقي نظرة على مثال بسيط لفتح ملف للكتابة:
\n\n#include <iostream>\n#include <fstream>\n#include <string>\n\nint main() {\n std::ofstream outFile("example.txt"); // نفتح الملف للكتابة\n \n if (outFile.is_open()) {\n outFile << "مرحبًا أيها الملف!" << std::endl;\n outFile << "هذا هو السطر الثاني." << std::endl;\n outFile.close(); // نغلق الملف\n std::cout << "تمت الكتابة بنجاح!" << std::endl;\n } else {\n std::cerr << "فشل فتح الملف!" << std::endl;\n }\n \n return 0;\n}\n\n\nلاحظ: نتحقق دائمًا مما إذا كان الملف قد فتح باستخدام is_open(). إذا لم يكن الملف موجودًا، سيقوم ofstream بإنشائه تلقائيًا. وإذا لم ينجح (على سبيل المثال، لا توجد صلاحيات للكتابة)، فلن يتعطل البرنامج، بل سيبلغ عن خطأ.
أوضاع الفتح: عندما لا يكفي وضع واحد
\n\nافتراضيًا، يقوم ofstream بإعادة كتابة الملف، بينما يقوم ifstream بالقراءة فقط. ولكن ماذا لو أردت إضافة بيانات إلى نهاية الملف؟ أو فتح ملف للقراءة والكتابة في نفس الوقت؟ هنا تأتي أعلام الأوضاع للإنقاذ:
- \n
std::ios::in- فتح للقراءة. \n std::ios::out- فتح للكتابة (افتراضي لـ ofstream). \n std::ios::app- الإضافة إلى نهاية الملف (append). \n std::ios::ate- نقل المؤشر إلى النهاية عند الفتح. \n std::ios::binary- الفتح في الوضع الثنائي. \n
مثال على استخدام الأوضاع:
\n\nstd::ofstream logFile("log.txt", std::ios::app); // الإضافة إلى النهاية\nif (logFile.is_open()) {\n logFile << "إدخال جديد في السجل" << std::endl;\n logFile.close();\n}\n\n\nوإذا كنت بحاجة إلى القراءة والكتابة معًا - استخدم fstream مع أعلام مركبة:
std::fstream file("data.txt", std::ios::in | std::ios::out);\n\n\nالقراءة من ملف: بالكلمات وبالأسطر
\n\nالقراءة من ملف في C++ هي فن بحد ذاته. يمكنك القراءة بالكلمات، بالأسطر، بالأحرف. يعتمد الاختيار على المهمة.
\n\nالقراءة بالأسطر (الطريقة الأكثر شيوعًا)
\n\n#include <fstream>\n#include <iostream>\n#include <string>\n\nint main() {\n std::