文件操作C++
頭文件
//標準輸入輸出流
#include
//派生自iostream,包括ifstream和ofstream
#include
相關類
ofstream
寫操作(輸出)的文件類 (由ostream引申而來)
ifstream
讀操作(輸入)的文件類(由istream引申而來)
fstream
可同時讀寫操作的文件類 (由iostream引申而來)
打開文件
對這些類的一個對象所做的第一個操作通常就是將它和一個真正的文件聯繫起來,也就是說打開一個文件。被打開的文件在程序中由一個流對象(stream object)來表示 (這些類的一個實例) ,而對這個流對象所做的任何輸入輸出操作實際就是對該文件所做的操作
void open (const char * filename, openmode mode);
或者利用構造函數打開文件
默認打開方式:
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out
打開模式 | 說明 |
---|---|
ios::in | 爲輸入(讀)而打開文件 |
ios::out | 爲輸出(寫)而打開文件 |
ios::ate | 打開文件時,定位到文件尾 |
ios::app | 所有輸出附加在文件末尾 |
ios::trunc | 如果文件已存在則先刪除該文件 |
ios::binary | 二進制方式 |
ios::nocreate | 不建立文件,所以文件不存在時打開失敗 |
ios::noreplace | 不覆蓋文件,所以打開文件時如果文件存在失敗 |
文件相關判斷:
is_open() | 來檢查一個文件是否已經被順利的打開 |
---|---|
void bad() | 如果在讀寫過程中出錯,返回 true |
void fail() | 除了與bad() 同樣的情況下會返回 true 以外,加上格式錯誤時也返回true |
eof() | 如果讀文件到達文件末尾,返回true |
good() | 如果調用以上任何一個函數返回true 的話,此函數返回 false |
clear() | 要想重置以上成員函數所檢查的狀態標誌,你可以使用成員函數,沒有參數 |
文件操作
文本文件
可以用重載操作符:cout,cin
獲得和設置流指針:
tellg() | 用於得到輸入流"get"位置 |
---|---|
tellp() | 用於得到輸出流"put"位置 |
seekg ( off_type offset, seekdir direction ); | |
seekp ( off_type offset, seekdir direction ); |
direction參數:
ios::beg | 從流開始位置計算的位移 |
---|---|
ios::cur | 從流指針當前位置開始計算的位移 |
ios::end | 從流末尾處開始計算的位移 |
寫文件數據同步
- 關閉文件
- buffer滿了
- 控制符明確指明,例如:flush,endl。
- 明確調用函數sync(),同步函數。無參數。這個函數返回一個int 值,等於-1 表示流沒有聯繫的緩存或操作失敗
塊讀寫
write(char * buffer, streamsize size); //返回寫入字節數
read(char * buffer, streamsize size); //返回讀取字節數
getline()可以忽略空格,(cin,cout遇到空格結束)