除了標準輸入輸出流類istream、ostream和iostream類外,還有3個用於文件操作的文件類:
流的名稱 |
流的作用 |
ifstream類 |
從istream類派生的,用來支持從磁盤文件的輸入 |
ofstream類 |
從ostream類派生的,用來支持向磁盤文件的輸出 |
fstream類 |
從iostream類派生的,用來支持對磁盤文件的輸入輸出 |
1、調用成員函數open的一般形式爲:
文件流對象.open(磁盤文件名, 輸入輸出方式);
磁盤文件名可以包括路徑,如"c:\new\\f1.dat",如缺省路徑,則默認爲當前目錄下的文件。
2、在定義文件流對象時指定參數
在聲明文件流類時定義了帶參數的構造函數,其中包含了打開磁盤文件的功能。因此,可以在定義文件流對象時指定參數,調用文件流類的構造函數來實現打開文件的功能。如
ostream outfile("f1.dat",ios::out);
例如:
(1)ofstream outfile;
outfile.open("f1.dat",ios::out); //向文件中寫入數據,失敗返回0
(2)ofstream outfile("f1.dat", ios::out);
方 式 |
作用 |
ios::in |
以輸入方式打開文件 |
ios::out |
以輸出方式打開文件(這是默認方式),如果已有此名字的文件,則將其原有內容全部清除 |
ios::app |
以輸出方式打開文件,寫入的數據添加在文件末尾 |
ios::ate |
打開一個已有的文件,文件指針指向文件末尾 |
ios: :trunc |
打開一個文件,如果文件已存在,則刪除其中全部數據,如文件不存在,則建立新文件。如已指定了 ios::out 方式,而未指定ios: :app,ios::ate,ios: :in,則同時默認此方式 |
ios:: binary |
以二進制方式打開一個文件,如不指定此方式則默認爲ASCII方式 |
ios::nocreate |
打開一個已有的文件,如文件不存在,則打開失敗。nocrcate的意思是不建立新文件 |
ios:: noreplace |
如果文件不存在則建立新文件,如果文件已存在則操作失敗,replace 的意思是不更新原有文件 |
ios::in l ios::out |
以輸入和輸出方式打開文件,文件可讀可寫 |
ios:: out | ios::binary |
以二進制方式打開一個輸出文件 |
ios::in l ios::binar |
以二進制方式打開一個輸入文件 |
判斷結尾:
每讀入一個字節,文件指針就後移一個字節。當文件指針移到最後,就會遇到文件結束EOF(文件結束符也佔一個字節,其值爲-1),此時流對象的成員函數eof的值爲非0值(一般設爲1),表示文件結束了。
#include<iostream>
#include <fstream>
using namespace std;
int main()
{
char buffer[1024];
ofstream outfile("QQ.txt", ios::out);//寫入文件
outfile << "A" <<endl<<"B"<<endl;
outfile.close();
ifstream infile("QQ.txt",ios::in);//讀取文件
while (!infile.eof())
{
infile.getline(buffer, 1000);
cout << buffer;
}
outfile.close();
}