Latest web development tutorials

C ++ file dan aliran

Sejauh ini, kita telah menggunakan perpustakaaniostream standar, yang menyediakan metode cindancoutaliran digunakan untuk membaca dari input standar dan menulis ke output stream standar.

Tutorial ini menunjukkan Anda bagaimana untuk membaca dan menulis file dari sungai untuk streaming file. Di situlah lainfstream C ++ Standard Library,mendefinisikan tiga jenis data baru:

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

Untuk mengajukan penanganan di C ++, Anda harus menyertakan file header di C ++ file kode sumber <iostream> dan <fstream>.

Buka file

Sebelum membaca informasi dari file atau menulis ke file, Anda harus terlebih dahulu membuka file.ofstream dan fstreamobjek dapat digunakan untuk membuka file untuk menulis, jika Anda hanya perlu membuka file untuk membaca, menggunakan objekifstream.

Berikut adalah terbuka fungsi () adalah sintaks standar, terbuka function () adalah anggota dari fstream, ifstream dan ofstream objek.

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

Di sini, () fungsi anggota terbuka parameter pertama untuk menentukan nama dan lokasi file yang ingin Anda buka, dan parameter kedua mendefinisikan file modus dibuka.

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

Anda dapat menggunakan kombinasi dari dua atau lebih dari mode di atas. Misalnya, jika Anda ingin membuka file dalam modus menulis dan ingin memotong file untuk mencegah file sudah ada, Anda dapat menggunakan sintaks berikut:

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

Demikian pula, Anda jika Anda ingin membuka file untuk membaca dan menulis, Anda dapat menggunakan sintaks berikut:

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

Menutup file

Ketika C ++ Program berakhir, itu akan mati secara otomatis me-refresh semua aliran, melepaskan semua memori yang dialokasikan dan tutup semua file yang terbuka. Tapi programmer harus mengembangkan kebiasaan yang baik, sebelum program berakhir tutup semua file yang terbuka.

Berikut adalah dekat () fungsi sintaks standar, dekat function () adalah anggota dari fstream, ifstream dan ofstream objek.

void close();

Menulis ke file

Dalam pemrograman C ++, kita menggunakan aliran penyisipan operator (<<) untuk menulis informasi ke file, seperti menggunakan informasi output ke operator pada layar yang sama. Satu-satunya perbedaan adalah bahwa di sini Anda menggunakanofstream atau objek fstreambukan objekcout.

Membaca file

Dalam pemrograman C ++, kita menggunakan operator ekstraksi aliran (>>) untuk membaca informasi dari sebuah file, seperti menggunakan informasi masukan operator dari keyboard. Satu-satunya perbedaan adalah bahwa di sini Anda menggunakanfstream atau objek ifstreambukan objekcin.

Membaca & menulis contoh

Berikut C ++ program untuk membuka file dalam mode read-write. Setelah menulis ke file afile.dat informasi yang dimasukkan oleh pengguna, program membaca informasi dari file dan output ke layar:

#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;
}

Ketika kode di atas dikompilasi dan dijalankan akan menghasilkan input dan output berikut:

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

Contoh di atas menggunakan tambahan fungsi objek cin, seperti getline () fungsi membaca garis dari luar, mengabaikan () fungsi akan membaca pernyataan sebelum meninggalkan keluar karakter tambahan diabaikan.

posisi file pointer

istream dan ostreammenyediakan fungsi anggota untuk reposisi posisi file pointer. Ini termasuk tentang fungsi anggota istream dariseekg ( "mencari mendapatkan") dan pada seekpostream( "seek menempatkan").

seekp seekg dan argumen biasanya integer panjang. Parameter kedua dapat digunakan untuk menentukan arah pencarian. Menemukan arah dapatios :: beg (default, posisi dari awal sungai), dapat ios :: skr (posisidari posisi saat ini dari sungai), dapatios :: end (dariujung sungai dimulai positioning).

posisi file pointer adalah nilai integer yang menentukan jumlah byte dari awal file ke lokasi pointer. Berikut menargetkan "mendapatkan" posisi file pointer misalnya:

// 定位到 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 );