كيف تقرأ وتكتب إلى ملف في C ++

How Read Write File C



في هذه المقالة ، سوف نوضح لك كيفية القراءة والكتابة إلى ملف بلغة البرمجة 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 ++ من خلال العمل من خلال عدة أمثلة. علاوة على ذلك ، أوضحنا لك كيفية قراءة البيانات وكتابتها في كل من الملفات النصية والملفات الثنائية.