Latest web development tutorials

الملفات والجداول C ++

حتى الآن، وقد استخدمنا مكتبةiostream القياسية، التي تنص على استخدام طرق CINوcoutتيار القراءة من الإدخال القياسي والكتابة إلى تيار الإخراج القياسي.

ويوضح هذا البرنامج التعليمي كيفية قراءة وكتابة الملفات من تيار لتيار الملفات. حيث انfstream مكتبة C ++ القياسية آخر،فإنه يحدد ثلاثة أنواع البيانات الجديدة:

数据类型 描述
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream 该数据类型表示输入文件流,用于从文件读取信息。
fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

إلى ملف معالجة في C ++، يجب عليك تضمين ملف الرأس في C + + رمز مصدر ملف <iostream> و <fstream>.

فتح الملف

قبل قراءة المعلومات من ملف أو الكتابة إلى ملف، يجب عليك أولا فتح الملف.ofstream وfstreamالأشياء يمكن أن تستخدم لفتح ملف للكتابة، إذا كنت بحاجة فقط لفتح ملف للقراءة، واستخدام الكائنifstream.

هنا هي وظيفة المفتوحة () هو صيغة قياسية، وظيفة المفتوحة () هي عضو في fstream، ifstream وofstream الكائنات.

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

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

模式标志 描述
ios::app 追加模式。所有写入都追加到文件末尾。
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。
ios::out 打开文件用于写入。
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

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

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

وبالمثل، إذا كنت تريد فتح ملف للقراءة والكتابة، يمكنك استخدام بناء الجملة التالي:

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

إغلاق الملف

عند إنهاء البرنامج C ++، فإنه سيتم إيقاف تلقائيا تحديث كافة الجداول، وإطلاق سراح جميع الذاكرة المخصصة وإغلاق كافة الملفات المفتوحة. ولكن المبرمجين ينبغي أن تضع عادة جيدة، قبل إنهاء البرنامج إغلاق جميع الملفات المفتوحة.

هنا هي وظيفة قريبة () هو صيغة قياسية، وثيقة وظيفة () هي عضو في fstream، ifstream وofstream الكائنات.

void close();

الكتابة إلى ملف

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

قراءة الملف

في البرمجة C ++، ونحن نستخدم المشغل استخراج تيار (>>) لقراءة المعلومات من ملف، تماما مثل استخدام المعلومات مشغل المدخلات من لوحة المفاتيح. الفرق الوحيد هو أن هنا كنت تستخدمfstream أو كائن ifstreamبدلا من كائنCIN.

القراءة والكتابة أمثلة

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

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

   // 以写模式打开文件
   ofstream outfile;
   outfile.open("afile.dat");

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

   // 向文件写入用户输入的数据
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // 再次向文件写入用户输入的数据
   outfile << data << endl;

   // 关闭打开的文件
   outfile.close();

   // 以读模式打开文件
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // 在屏幕上写入数据
   cout << data << endl;
   
   // 再次从文件读取数据,并显示它
   infile >> data; 
   cout << data << endl; 

   // 关闭打开的文件
   infile.close();

   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج المدخلات والمخرجات التالية:

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

الأمثلة أعلاه استخدام كائن وظيفة CIN إضافية، مثل getline () وظيفة يقرأ خط من الخارج، وتجاهل () وظيفة قراءة بيان قبل تاركة الأحرف الزائدة يتم تجاهل.

مؤشر موقف ملف

istream وostreamتوفر وظائف الأعضاء لتغيير موضع موقف مؤشر الملف. وتشمل هذه عن وظائف عضو istream منseekg ( "طلب الحصول على") وعلى seekpostream( "تسعى وضع").

seekp seekg وحجة وعادة ما يكون عدد صحيح طويل. المعلمة الثانية يمكن استخدامها لتحديد اتجاه البحث. البحث عن الاتجاه يمكن أن يكوندائرة الرقابة الداخلية :: التسول (الافتراضي، وتحديد المواقع من البداية للتيار)، يمكن أن يكون دائرة الرقابة الداخلية :: لئيم (تحديد المواقعمن الموقف الحالي للتيار)، يمكن أن يكوندائرة الرقابة الداخلية :: نهاية (مننهاية للتيار بدء تحديد المواقع).

مؤشر موقف الملف هو قيمة عدد صحيح يحدد عدد وحدات البايت من بداية الملف إلى موقع المؤشر. هنا هو استهداف "الحصول على" سبيل المثال مؤشر موقف الملف:

// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );

// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );

// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );

// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );