القائمة الرئيسية

الصفحات

C++ Files and Streams



 So far, we have been using the iostream standard library, which provides cin and cout methods for reading from standard input and writing to standard output respectively.

This tutorial will teach you how to read and write from a file. This requires another standard C++ library called fstream, which defines three new data types −

حتى الآن ، كنا نستخدم مكتبة iostream القياسية ، والتي توفر أساليب cin و cout للقراءة من الإدخال القياسي والكتابة إلى الإخراج القياسي على التوالي. سيعلمك هذا البرنامج التعليمي كيفية القراءة والكتابة من ملف. يتطلب هذا مكتبة C قياسية أخرى تسمى fstream ، والتي تحدد ثلاثة أنواع جديدة من البيانات -

Sr.NoData Type & Description
1

ofstream

This data type represents the output file stream and is used to create files and to write information to files.

2

ifstream

This data type represents the input file stream and is used to read information from files.

3

fstream

This data type represents the file stream generally, and has the capabilities of both ofstream and ifstream which means it can create files, write information to files, and read information from files.

To perform file processing in C++, header files <iostream> and <fstream> must be included in your C++ source file.

Opening a File

A file must be opened before you can read from it or write to it. Either ofstream or fstream object may be used to open a file for writing. And ifstream object is used to open a file for reading purpose only.

Following is the standard syntax for open() function, which is a member of fstream, ifstream, and ofstream objects.

فتح ملف يجب فتح الملف قبل أن تتمكن من القراءة منه أو الكتابة إليه. يمكن استخدام أي من الكائن ofstream أو fstream لفتح ملف للكتابة. ويتم استخدام كائن ifstream لفتح ملف لغرض القراءة فقط. فيما يلي الصيغة القياسية لوظيفة open () ، وهي عضو في كائنات fstream و ifstream و ofstream.

void open(const char *filename, ios::openmode mode);

Here, the first argument specifies the name and location of the file to be opened and the second argument of the open() member function defines the mode in which the file should be opened.

هنا ، تحدد الوسيطة الأولى اسم وموقع الملف الذي سيتم فتحه ، بينما تحدد الوسيطة الثانية لوظيفة العضو open () الوضع الذي يجب فتح الملف فيه.

Sr.NoMode Flag & Description
1

ios::app

Append mode. All output to that file to be appended to the end.

2

ios::ate

Open a file for output and move the read/write control to the end of the file.

3

ios::in

Open a file for reading.

4

ios::out

Open a file for writing.

5

ios::trunc

If the file already exists, its contents will be truncated before opening the file.

You can combine two or more of these values by ORing them together. For example if you want to open a file in write mode and want to truncate it in case that already exists, following will be the syntax −

يمكنك دمج اثنين أو أكثر من هذه القيم عن طريق أو الجمع بينهما. على سبيل المثال ، إذا كنت تريد فتح ملف في وضع الكتابة وتريد اقتطاعه في حالة وجوده بالفعل ، فسيكون التالي هو بناء الجملة -

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

Similar way, you can open a file for reading and writing purpose as follows −

fstream  afile;
afile.open("file.dat", ios::out | ios::in );

Closing a File

When a C++ program terminates it automatically flushes all the streams, release all the allocated memory and close all the opened files. But it is always a good practice that a programmer should close all the opened files before program termination.

Following is the standard syntax for close() function, which is a member of fstream, ifstream, and ofstream objects.

عند إنهاء برنامج C ، فإنه يقوم تلقائيًا بمسح جميع التدفقات ، وتحرير جميع الذاكرة المخصصة وإغلاق جميع الملفات المفتوحة. ولكن من الممارسات الجيدة دائمًا أن يقوم المبرمج بإغلاق جميع الملفات المفتوحة قبل إنهاء البرنامج. فيما يلي الصيغة القياسية لوظيفة close () ، وهي عضو في كائنات fstream و ifstream و ofstream.

void close();

Writing to a File

While doing C++ programming, you write information to a file from your program using the stream insertion operator (<<) just as you use that operator to output information to the screen. The only difference is that you use an ofstream or fstream object instead of the cout object.

أثناء القيام ببرمجة لغة سي ، تقوم بكتابة معلومات إلى ملف من برنامجك باستخدام عامل إدخال التدفق (<<) تمامًا كما تستخدم هذا العامل لإخراج المعلومات إلى الشاشة. الاختلاف الوحيد هو أنك تستخدم كائن ofstream أو fstream بدلاً من كائن cout.

Reading from a File

You read information from a file into your program using the stream extraction operator (>>) just as you use that operator to input information from the keyboard. The only difference is that you use an ifstream or fstream object instead of the cin object.

تقرأ المعلومات من ملف في برنامجك باستخدام عامل استخراج التدفق (>>) تمامًا كما تستخدم هذا المشغل لإدخال المعلومات من لوحة المفاتيح. الاختلاف الوحيد هو أنك تستخدم كائن ifstream أو fstream بدلاً من كائن cin.

Read and Write Example

Following is the C++ program which opens a file in reading and writing mode. After writing information entered by the user to a file named afile.dat, the program reads information from the file and outputs it onto the screen −

فيما يلي برنامج C الذي يفتح ملفًا في وضع القراءة والكتابة. بعد كتابة المعلومات التي أدخلها المستخدم إلى ملف يسمى afile.dat ، يقوم البرنامج بقراءة المعلومات من الملف وإخراجها على الشاشة -


#include <fstream>
#include <iostream>
using namespace std;
 
int main () {
   char data[100];

   // open a file in write mode.
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // write inputted data into the file.
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // again write inputted data into the file.
   outfile << data << endl;

   // close the opened file.
   outfile.close();

   // open a file in read mode.
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // write the data at the screen.
   cout << data << endl;
   
   // again read the data from the file and display it.
   infile >> data; 
   cout << data << endl; 

   // close the opened file.
   infile.close();

   return 0;
}

When the above code is compiled and executed, it produces the following sample input and output −

$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

Above examples make use of additional functions from cin object, like getline() function to read the line from outside and ignore() function to ignore the extra characters left by previous read statement.

File Position Pointers

Both istream and ostream provide member functions for repositioning the file-position pointer. These member functions are seekg ("seek get") for istream and seekp ("seek put") for ostream.

The argument to seekg and seekp normally is a long integer. A second argument can be specified to indicate the seek direction. The seek direction can be ios::beg (the default) for positioning relative to the beginning of a stream, ios::cur for positioning relative to the current position in a stream or ios::end for positioning relative to the end of a stream.

The file-position pointer is an integer value that specifies the location in the file as a number of bytes from the file's starting location. Some examples of positioning the "get" file-position pointer are −

يوفر كل من istream و ostream وظائف الأعضاء لتغيير موضع مؤشر موضع الملف. وظائف الأعضاء هذه هي عبارة عن ("طلب الحصول على") لـ istream و Seep ("البحث عن وضع") لـ ostream. عادة ما تكون حجة البحث والسعي عبارة عن عدد صحيح طويل. يمكن تحديد وسيطة ثانية للإشارة إلى اتجاه البحث. يمكن أن يكون اتجاه البحث هو ios :: beg (الافتراضي) لتحديد الموضع بالنسبة إلى بداية التدفق ، أو ios :: cur لتحديد الموضع بالنسبة إلى الموضع الحالي في تيار أو ios :: end لتحديد الموضع بالنسبة إلى نهاية a مجرى. مؤشر موضع الملف هو قيمة عدد صحيح يحدد الموقع في الملف بعدد وحدات البايت من موقع بدء الملف. بعض الأمثلة على وضع مؤشر موضع الملف "get" هي -

// position to the nth byte of fileObject (assumes ios::beg)
fileObject.seekg( n );

// position n bytes forward in fileObject
fileObject.seekg( n, ios::cur );

// position n bytes back from end of fileObject
fileObject.seekg( n, ios::end );

// position at end of fileObject
fileObject.seekg( 0, ios::end );
هل اعجبك الموضوع :

تعليقات