توضح هذه المقالة منهجية برمجية لإدراج نص جديد في بداية ملف موجود باستخدام لغة C++، مع الحفاظ على المحتوى الأصلي للملف.
تتطلب عملية إضافة محتوى نصي جديد إلى بداية ملف موجود، مع الاحتفاظ بسلامة البيانات الأصلية، اتباع سلسلة من الخطوات المنهجية. يتمثل النهج الأساسي في قراءة المحتوى الحالي للملف وتخزينه مؤقتًا في متغير نصي. بعد ذلك، يُعاد إنشاء الملف الأصلي، ثم يُضاف النص الجديد المراد إدراجه، يليه المحتوى الذي تم تخزينه مسبقًا.
يمكن اعتماد طريقة بديلة تتضمن إنشاء ملف مؤقت يحتوي على النص الجديد، ثم قراءة محتوى الملف الأصلي وإلحاقه بالملف المؤقت. سيعرض المثال المرفق تطبيقًا للطريقة الأولى باستخدام مكتبات معالجة الملفات في C++.
لتحقيق ذلك، يُستخدم كائن من الفئة ifstream لقراءة محتوى الملف الأصلي الذي يُراد التعديل عليه، وكائن من الفئة ofstream لإنشاء ملف جديد بنفس الاسم وكتابة البيانات فيه.
مثال برمجي
يوضح الكود التالي عملية إدراج نص في بداية ملف prepend.txt:
# include <iostream>
# include <fstream>
using namespace std; int main () { // هنا قمنا بإنشاء كائن من الكلاس ifstream إسمه infile لأننا سنتخدمه لقراءة محتوى ملف موجود في الحاسوب // و قمنا بإنشاء كائن من الكلاس ofstream إسمه outfile لأننا سنتخدمه للكتابة في نفس الملف السابق // المتغير data سنضع فيه النص الذي نقرؤه من الملف بشكل مؤقت // المتغير textToAdd وضعنا فيه النص الذي ننوي إضافته في بداية الملف على سطر خاص ifstream infile; ofstream outfile; string data; string textToAdd = "This is a new line added at the begining.\n" ; // هنا قمنا باستدعاء الدالة open() لفتح ملف إسمه "prepend.txt" infile. open ( "prepend.txt" ); // هنا قمنا بالتأكد من أن الإتصال بالملف الذي يشير له الكائن infile لا يوجد فيه أي مشاكل قبل التعامل معه if (infile) { // سنستخدم هذا المتغير لتخزين كل سطر جديد نقوم بجلبه من الملف فيه بشكل مؤقت قبل عرضه string line; // هنا في كل دورة من دورات الحلقة while طالما أن الدالة getline() تجد سطر جديد, ستقوم بوضعه بشكل مؤقت في المتغير line while ( getline (infile, line)) { // بعدها سيتم إضافة السطر الذي تم وضعه بشكل مؤقت في المتغير line في المتغير data data += line + "\n" ; } // عند انتهاء الحلقة سيكون كل محتوى الملف قد تم وضعه في المتغير data } // هنا قمنا باستدعاء الدالة close() من الكائن infile لإغلاق الإتصال مع الملف المفتوح في الذاكرة infile. close (); // هنا قمنا باستدعاء الدالة open() لإنشاء ملف جديد إسمه "prepend.txt" بدل الملف القديم و فتحه أيضاً outfile. open ( "prepend.txt" ); // هنا قمنا بالتأكد من أن الإتصال بالملف الذي يشير له الكائن outfile لا يوجد فيه أي مشاكل قبل التعامل معه if (outfile) { // هنا قمنا بإضافة النص الموجود في المتغير textToAdd في الملف الجديد الذي يشير إليه الكائن outfile outfile << textToAdd; // بعدها قمنا بإضافة النص الموجود في المتغير data الذي قمنا بنسخه من الملف الأصلي في الملف الذي يشير إليه الكائن outfile أيضاً outfile << data; } // هنا قمنا باستدعاء الدالة close() من الكائن outfile لإغلاق الإتصال مع الملف المفتوح في الذاكرة outfile. close (); return 0 ;
}
عند تنفيذ البرنامج، سيُنشأ ملف باسم prepend.txt في دليل المشروع، ويحتوي على النص الجديد في بدايته. على سبيل المثال:
This is a new line added at the begining.
للتأكد من آلية العمل، يُنصح بإغلاق الملف prepend.txt إذا كان مفتوحًا، ثم إعادة تشغيل البرنامج. ستلاحظ إضافة النص المحدد مرة أخرى في بداية الملف، مما يؤكد فعالية الطريقة في كل عملية تشغيل:
This is a new line added at the begining.
This is a new line added at the begining.
يمكن للمستخدم تعديل قيمة المتغير textToAdd لاختبار إدراج نصوص مختلفة في بداية الملف.