Fail dan strim C++
Setakat ini, kami telah menggunakan pustaka standard iostream, yang menyediakan kaedah cin dan cout untuk membaca aliran daripada input standard dan Menulis aliran ke keluaran standard.
Tutorial ini menerangkan cara membaca strim dari dan menulis strim ke fail. Ini memerlukan penggunaan perpustakaan standard lain dalam C++ fstream, yang mentakrifkan tiga jenis data baharu:
数据类型 | 描述 |
---|---|
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
Untuk melaksanakan pemprosesan fail dalam C++, anda mesti menggunakan sumber C++ Fail kod mengandungi fail pengepala <iostream> dan <fstream>.
Buka Fail
Sebelum anda boleh membaca maklumat daripada atau menulis maklumat pada fail, anda mesti membuka fail itu terlebih dahulu. Kedua-dua objek ofstream dan fstream boleh digunakan untuk membuka fail untuk operasi menulis Jika anda hanya perlu membuka fail untuk operasi membaca, gunakan objek ifstream.
Berikut ialah sintaks standard bagi fungsi open(), yang merupakan ahli objek fstream, ifstream dan ofstream.
void open(const char *filename, ios::openmode mode);
Di sini, parameter pertama fungsi ahli open() menentukan nama dan lokasi fail yang akan dibuka, dan parameter kedua mentakrifkan mod di mana fail dibuka .
模式标志 | 描述 |
---|---|
ios::app | 追加模式。所有写入都追加到文件末尾。 |
ios::ate | 文件打开后定位到文件末尾。 |
ios::in | 打开文件用于读取。 |
ios::out | 打开文件用于写入。 |
ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
Anda boleh menggabungkan dua atau lebih mod di atas. Contohnya, jika anda ingin membuka fail dalam mod tulis dan ingin memotong fail sekiranya fail itu sudah wujud, maka anda boleh menggunakan sintaks berikut:
ofstream outfile; outfile.open("file.dat", ios::out | ios::trunc );
Begitu juga, jika anda ingin membuka fail dengan Untuk membaca dan menulis, anda boleh menggunakan sintaks berikut:
fstream afile; afile.open("file.dat", ios::out | ios::in );
Tutup fail
Apabila program C++ ditamatkan, ia akan menutup dan menyegarkan semula semua aliran secara automatik, melepaskan semua memori yang diperuntukkan dan tutup semua dokumen yang terbuka. Tetapi pengaturcara harus membangunkan tabiat yang baik untuk menutup semua fail terbuka sebelum program ditamatkan.
Berikut ialah sintaks standard fungsi close(), yang merupakan ahli objek fstream, ifstream dan ofstream.
void close();
Menulis ke fail
Dalam pengaturcaraan C++, kami menggunakan operator sisipan strim ( << ) untuk menulis maklumat pada fail, sama seperti menggunakan operator ini untuk mengeluarkan maklumat ke skrin Sama. Satu-satunya perbezaan ialah di sini anda menggunakan objek ofstream atau fstream dan bukannya objek cout.
Membaca fail
Dalam pengaturcaraan C++, kami menggunakan operator pengekstrakan strim ( >> ) untuk membaca maklumat daripada fail, sama seperti kami menggunakan operator ini untuk memasukkan maklumat daripada papan kekunci . Satu-satunya perbezaan ialah di sini anda menggunakan objek ifstream atau fstream dan bukannya objek cin.
Contoh Baca & Tulis
Atur cara C++ berikut membuka fail dalam mod baca dan tulis. Selepas menulis maklumat yang dimasukkan pengguna ke fail afile.dat, atur cara membaca maklumat daripada fail dan mengeluarkannya ke skrin:
#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; }
Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan Input berikut dan output:
$./a.out Writing to the file Enter your name: Zara Enter your age: 9 Reading from the file Zara 9
Dalam contoh di atas, fungsi tambahan objek cin digunakan Contohnya, fungsi getline() membaca baris dari luar, dan fungsi ignore() mengabaikan aksara tambahan yang tinggal. dengan pernyataan bacaan sebelumnya.
Penunjuk lokasi fail
istream dan ostream kedua-duanya menyediakan fungsi ahli untuk memindahkan penunjuk lokasi fail. Fungsi ahli ini termasuk seekg ("seek get") untuk istream dan seekp ("seek put") untuk ostream.
Hujah untuk seekg dan seekp biasanya merupakan integer yang panjang. Parameter kedua boleh digunakan untuk menentukan arah carian. Arah carian boleh menjadi ios::beg (lalai, bermula dari permulaan strim), atau ios::cur (bermula dari kedudukan semasa strim), atau Boleh menjadi ios::end (diposisikan dari hujung strim).
Penunjuk kedudukan fail ialah nilai integer yang menentukan bilangan bait dari kedudukan permulaan fail ke kedudukan penuding. Berikut ialah contoh meletakkan penunjuk lokasi fail "dapatkan":
// 定位到 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 );