一、數據輸出到文件(ofstream開啓一個可供輸出的文件)ios
C++文件操做包括輸入、輸出、拷貝、批處理。緩存
將簡單的數據流輸出到文件,只須要下面幾步:session
首先要申明一個類的對象實例,將對象與文件相關聯(也就是打開文件)。對這個流對象實例的輸入輸出操做就是對文件的操做。app
1 #include<fstream>//包含fstream文件 2 using namespace std; 3 4 int main() 5 { 6 ofstream outfile;//創建ofstream對象 7 outfile.open("test.txt");//將對象與文件關聯 8 outfile<<"Hello,world!";//使用file對象將數據輸出到test.txt文件中 9 outfile.close();//關閉與文件的鏈接 10 return 0; 11 }
程序運行結果:在程序源文件的同級目錄下生成test.txt文件。函數
ps:若是指定的文件不存在,會有一個文件被產生出來並做爲輸出之用。若是指定的文件已經存在,這個文件會被開啓做爲輸出之用,而文件中原已存在的數據會被丟棄。spa
因爲對類ofstream,ifstream和fstream的對象所進行的第一個操做一般都是打開文件,這些類都有一個構造函數能夠直接調用open函數,並擁有一樣的參數。因此能夠經過如下方法實現上面程序的第6行和第7行的效果:指針
ofstream outfile("test.txt");
二、成員函數open()code
函數原型:對象
void open( const char *_Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out, int _Prot = (int)ios_base::_Openprot ); void open( const char *_Filename, ios_base::openmode _Mode ); void open( const wchar_t *_Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out, int _Prot = (int)ios_base::_Openprot ); void open( const wchar_t *_Filename, ios_base::openmode _Mode );
參數說明:blog
_Filename The name of the file to open. 打開文件名 _Mode One of the enumerations in ios_base::openmode. 文件的打開方式(在ios_base::openmode中定義) _Prot The default file opening protection. 默認進行文件打開時的保護
ios_base::openmode中定義的打開方式:
ios::in, to permit extraction from a stream. 打開文件進行讀操做,即讀取文件中的數據 ios::out, to permit insertion to a stream. 打開文件進行寫操做,即輸出數據到文件中 ios::app, to seek to the end of a stream before each insertion. 打開文件以後文件指針指向文件末尾,只能在文件末尾進行數據的寫入 ios::ate, to seek to the end of a stream when its controlling object is first created. 打開文件以後文件指針指向文件末尾,可是能夠在文件的任何地方進行數據的寫入 ios::trunc, to delete contents of an existing file when its controlling object is created. 默認的文件打開方式,若文件已經存在,則清空文件的內容 ios::binary, to read a file as a binary stream, rather than as a text stream. 打開文件爲二進制文件,不然爲文本文件
類ofstream,ifstream和fstream的成員函數open都包含了一個默認打開文件的mode:
1 ofstream -> ios::out|ios::trunc 2 ifstream -> ios::in 3 fstream -> ios::in|::ios::out
三、檢驗文件是否開啓成功
文件有可能開啓失敗,在進行寫入操做以前,咱們必須肯定文件的確開啓成功。
(1)最簡單的方法是檢驗class object的真僞:
1 #include<fstream>//包含fstream文件 2 #include<iostream>//cerr須要包含iostream頭文件 3 using namespace std; 4 5 int main() 6 { 7 ofstream file("test.txt");//創建對象並將對象與文件關聯 8 if(!file) 9 { 10 //若是file的計算結果爲false,表示此文件並未開啓成功 11 cerr<<"Oops!Unable to save session data!\n"; 12 } 13 file.close();//關閉與文件的鏈接 14 return 0; 15 }
ps:cerr表明標準錯誤輸出設備。cerr和cout的區別:
①cerr不通過緩衝區,直接向顯示器輸出信息,而cout中的信息存放在緩衝區,緩衝區滿或者遇到endl時才輸出。。
②cout輸出的信息能夠重定向,而cerr只能輸出到標準輸出(顯示器)上。
(2)調用成員函數is_open();
bool is_open();//返回bool值,爲true表明文件成功打開
1 // ifstream::is_open 2 #include <iostream> 3 #include <fstream> 4 using namespace std; 5 6 int main () { 7 ifstream file("test.txt"); 8 9 if (file.is_open()) { 10 //其餘代碼 11 cout<<"Succeed opening file"; 12 } 13 else { 14 // show message: 15 cout<<"Error opening file"; 16 } 17 18 return 0; 19 }
四、關閉文件
當文件讀寫操做完成以後,咱們必須將文件關閉以使文件從新變爲可訪問的。
調用成員函數close()函數關閉文件,負責將緩存中的數據排放出來並關閉文件。
void close();
這個函數一旦被調用,初識聲明的流對象就能夠被用來打開其餘文件,這個文件也能夠重修被其餘進程訪問。
ps:爲防止流對象被銷燬時還關聯着打開的文件,析構函數將會自動調用關閉函數close()。