في هذه المقالة ، سوف نوضح لك كيفية القراءة والكتابة إلى ملف بلغة البرمجة C ++ باستخدام عدة أمثلة. لفهم عمليات ملف C ++ مثل القراءة والكتابة ، يجب أن نفهم أولاً مفهوم الدفق في C ++.
ما هو الدفق؟
الدفق هو ببساطة تدفق البيانات أو الأحرف. هناك نوعان من التدفقات: تدفقات الإدخال وتدفقات الإخراج. يتم استخدام دفق الإدخال لقراءة البيانات من جهاز إدخال خارجي مثل لوحة المفاتيح ، بينما يتم استخدام دفق الإخراج لكتابة البيانات إلى جهاز الإخراج الخارجي مثل الشاشة. يمكن اعتبار الملف كمصدر إدخال ومخرج.
في C ++ ، نستخدم دفقًا لإرسال البيانات أو استقبالها من أو إلى مصدر خارجي.
يمكننا استخدام الفئات المضمنة للوصول إلى دفق الإدخال / الإخراج ، أي ios.
هنا هو التسلسل الهرمي لفئة الدفق للغة البرمجة C ++:
يتم استخدام كائنات cin و cout لقراءة البيانات من لوحة المفاتيح ولعرض الإخراج على الشاشة ، على التوالي. بالإضافة إلى ذلك ، يتم استخدام ifstream ، والتي تعني دفق ملف الإدخال ، لقراءة تدفق البيانات من ملف ، ويتم استخدام ofstream ، والتي تعني دفق ملف الإخراج ، لكتابة تدفق البيانات إلى ملف.
يحتوي ملف iostram.h على جميع فئات دفق الإدخال / الإخراج القياسية المطلوبة في لغة البرمجة C ++.
أمثلة
الآن بعد أن فهمت أساسيات التدفقات ، سنناقش الأمثلة التالية لمساعدتك على فهم عمليات الملفات بشكل أفضل في C ++:
- مثال 1: فتح وإغلاق ملف
- مثال 2: اكتب إلى ملف
- مثال 3: اقرأ من ملف
- مثال 4: القراءة والكتابة إلى ملف
- مثال 5: القراءة والكتابة إلى ملف ثنائي
مثال 1: فتح وإغلاق ملف
في هذا المثال البرنامج ، سنشرح كيفية فتح / إنشاء ملف وكيفية إغلاق الملف في C ++. كما ترى في البرنامج أدناه ، قمنا بتضمين المكتبة المطلوبة لعمليات الملفات.
لفتح ملف وإغلاقه ، نحتاج إلى كائن تيار. بعد ذلك ، للقراءة أو الكتابة إلى ملف ، يتعين علينا فتح الملف. لقد قمنا بتضمين ملف رأس fstream في السطر رقم 1 حتى نتمكن من الوصول إلى فئة تيار.
لقد أعلنا عن myFile_Handler ككائن من تيار داخل الوظيفة الرئيسية. يمكننا بعد ذلك استخدام الدالة open () لإنشاء ملف فارغ والوظيفة close () لإغلاق الملف.
#يشملاستخدام مساحة الاسمساعات؛
intالأساسية()
{
من تيار myFile_Handler؛
// فتح الملف
myFile_Handler.افتح('ملف_1.txt')؛
// ملف إغلاق
myFile_Handler.أغلق()؛
إرجاع 0؛
}
الآن ، سنقوم بتجميع البرنامج وفحص الإخراج. كما ترى في نافذة الإخراج أدناه ، تم إنشاء ملف File_1.txt بعد تنفيذ البرنامج. حجم الملف صفر لأننا لم نكتب أي محتوى في الملف.
مثال 2: اكتب إلى ملف
في المثال السابق للبرنامج ، أوضحنا لك كيفية فتح ملف وكيفية إغلاق الملف. الآن ، سنوضح لك كيفية كتابة شيء ما في ملف.
يمكننا الكتابة إلى ملف باستخدام مشغل إدخال الدفق ، على سبيل المثال ،<<. In this program, we have used the file handler and insertion operator to write two lines in the file. The insertion operator (<<) indicates that we are inserting the string into the output file stream object.
#يشملاستخدام مساحة الاسمساعات؛
intالأساسية()
{
من تيار myFile_Handler؛
// فتح الملف
myFile_Handler.افتح('ملف_1.txt')؛
// اكتب إلى الملف
myFile_Handler<< هذا نموذج لملف اختبار. ' <<endl؛
myFile_Handler<< هذا هو السطر الثاني من الملف. ' <<endl؛
// ملف إغلاق
myFile_Handler.أغلق()؛
إرجاع 0؛
}
الآن ، سنقوم بتجميع البرنامج أعلاه وتنفيذه. كما ترى أدناه ، فقد نجحنا في الكتابة إلى الملف File_1.txt.
مثال 3: اقرأ من ملف
في الأمثلة السابقة ، أوضحنا لك كيفية كتابة المحتوى إلى ملف. الآن ، دعنا نقرأ المحتوى من الملف الذي أنشأناه في المثال 2 ونعرض المحتوى على جهاز الإخراج القياسي ، أي الشاشة.
نستخدم وظيفة getline () لقراءة السطر الكامل من الملف ثم cout لطباعة السطر على الشاشة.
#يشمل#يشمل
#يشمل
استخدام مساحة الاسمساعات؛
intالأساسية()
{
ifstream myFile_Handler؛
سلسلة myLine؛
// فتح ملف في وضع القراءة
myFile_Handler.افتح('ملف_1.txt')؛
لو(myFile_Handler.مفتوح())
{
// استمر في قراءة الملف
في حين(الحصول على خط(myFile_Handler ، myLine))
{
// طباعة السطر على الإخراج القياسي
كلفة <<خطي<<endl؛
}
// ملف إغلاق
myFile_Handler.أغلق()؛
}
آخر
{
كلفة << 'غير قادر على فتح الملف!'؛
}
إرجاع 0؛
}
الآن ، سنقوم بطباعة محتوى File_1.txt باستخدام الأمر التالي: cat File_1.txt. بمجرد تجميع البرنامج وتنفيذه ، من الواضح أن الإخراج يطابق محتوى الملف. لذلك ، قمنا بقراءة الملف بنجاح وطباعة محتوى الملف على الشاشة.
مثال 4: القراءة والكتابة إلى ملف
حتى الآن ، أوضحنا لك كيفية فتح ملف وقراءته وكتابته وإغلاقه. في C ++ ، يمكننا أيضًا قراءة ملف والكتابة إليه في نفس الوقت. للقراءة والكتابة إلى ملف ، علينا الحصول على كائن fstream وفتح الملف في الوضعين ios :: in و ios :: out.
في هذا المثال ، نكتب أولاً بعض المحتوى إلى الملف. ثم نقرأ البيانات من الملف ونطبعها على الشاشة.
#يشمل#يشمل
#يشمل
استخدام مساحة الاسمساعات؛
intالأساسية()
{
fstream myFile_Handler؛
سلسلة myLine؛
// فتح الملف
myFile_Handler.افتح('ملف_1.txt'، دائرة الرقابة الداخلية::في |دائرة الرقابة الداخلية::خارج)؛
// تحقق مما إذا كان الملف قد تم فتحه
لو(!myFile_Handler)
{
كلفة << 'الملف لم يفتح!'؛
خروج(1)؛
}
// اكتب إلى الملف
myFile_Handler<< '1. هذا ملف اختبار عينة آخر. ' <<endl؛
myFile_Handler<< 2. هذا هو السطر الثاني من الملف. ' <<endl؛
myFile_Handler.تسعى(دائرة الرقابة الداخلية::إفترض جدلا)؛
// اقرأ الملف
لو(myFile_Handler.مفتوح())
{
// استمر في قراءة الملف
في حين(الحصول على خط(myFile_Handler ، myLine))
{
// طباعة السطر على الإخراج القياسي
كلفة <<خطي<<endl؛
}
// ملف إغلاق
myFile_Handler.أغلق()؛
}
آخر
{
كلفة << 'غير قادر على فتح الملف!'؛
}
myFile_Handler.أغلق()؛
إرجاع 0؛
}
الآن ، سنقوم بتجميع وتنفيذ البرنامج.
مثال 5: القراءة والكتابة إلى ملف ثنائي
في هذا المثال ، سنعلن فئة ثم نكتب الكائن في ملف ثنائي. لتبسيط هذا المثال ، أعلنا عن فئة الموظف بمتغير عام emp_id. بعد ذلك ، سنقرأ الملف الثنائي ونطبع الإخراج على الشاشة.
#يشمل#يشمل
استخدام مساحة الاسمساعات؛
صف دراسيالموظف
{
عام:
intمعرف؛
}؛
intالأساسية()
{
ofstream binOutFile_Handler؛
ifstream binInFile_Handler؛
الموظف empObj_W، empObj_R؛
// فتح الملف
binOutFile_Handler.افتح('worker.dat'، دائرة الرقابة الداخلية::خارج |دائرة الرقابة الداخلية::الثنائية)؛
// تحقق مما إذا كان الملف قد تم فتحه
لو(!binOutFile_Handler)
{
كلفة << 'الملف لم يفتح!'؛
خروج(1)؛
}
// تهيئة empObj_W
empObj_W.معرف = 1512؛
// اكتب إلى الملف
binOutFile_Handler.اكتب((شار *) &empObj_W ،حجم(الموظف))؛
binOutFile_Handler.أغلق()؛
لو(!binOutFile_Handler.حسن())
{
كلفة << 'حدث خطأ أثناء كتابة الملف الثنائي!' <<endl؛
خروج(2)؛
}
// الآن ، دعنا نقرأ ملف worker.dat
binInFile_Handler.افتح('worker.dat'، دائرة الرقابة الداخلية::في |دائرة الرقابة الداخلية::الثنائية)؛
// تحقق مما إذا كان الملف قد تم فتحه
لو(!binInFile_Handler)
{
كلفة << 'الملف لم يفتح!'؛
خروج(3)؛
}
// اقرأ محتوى الملف الثنائي
binInFile_Handler.اقرأ((شار *) &empObj_R ،حجم(الموظف))؛
binInFile_Handler.أغلق()؛
لو(!binInFile_Handler.حسن())
{
كلفة << 'حدث خطأ أثناء قراءة الملف الثنائي!' <<endl؛
خروج(4)؛
}
// طباعة إخراج empObj_R
كلفة << 'تفاصيل الموظف:' <<endl؛
كلفة << 'هوية الموظف : ' <<empObj_R.معرف <<endl؛
إرجاع 0؛
}
استنتاج
تُستخدم الملفات بشكل أساسي لتخزين البيانات ، وتلعب دورًا مهمًا في برمجة العالم الحقيقي. في هذه المقالة ، أوضحنا لك كيفية استخدام عمليات الملفات المختلفة باستخدام لغة البرمجة C ++ من خلال العمل من خلال عدة أمثلة. علاوة على ذلك ، أوضحنا لك كيفية قراءة البيانات وكتابتها في كل من الملفات النصية والملفات الثنائية.