C++流和檔案流
阿新 • • 發佈:2018-12-31
在程式設計中,資料輸入/輸出(I/O)操作是必不可少的,C++語言的資料輸入/輸出操作是通過I/O流庫來實現的。C++中把資料之間的傳輸操作稱為流,流既可以表示資料從記憶體傳送到某個載體或裝置中,即輸出流,也可以表示資料從某個載體或裝置傳送到記憶體緩衝區變數中,即輸入流。在進行I/O操作時,首先是開啟操作,使流和檔案發生聯絡,建立聯絡後的檔案才允許資料流入和流出,輸入或輸出結束後,使用關閉操作使檔案與流斷開聯絡。
標準輸入輸出流(cout、cin)在使用過程中,只要在程式的開頭嵌入相應的標頭檔案“iostream.h”即可。 檔案的開啟和關閉是通過使用fstream類的成員函式open和close來實現的,fstream類用來對檔案流進行操作,fstream類的標頭檔案是fstream.h。 cout是標準輸出裝置即顯示器(預設裝置)連線的預定義輸出流。C++語言的插入運算子“<<”向輸出流傳送字元,cout是資料的目的地,插入運算子“<<”把資料傳送到cout。 輸出流物件cout輸出資料的語句格式為: cout<<資料1<<資料2<<……<<資料n; 其中,“<<”是輸出操作符,用於向cout輸出流中插入資料。 在cout中還可以使用流控制符控制資料的輸出格式,但要注意使用這些流控制符時,要在程式的開始部分嵌入標頭檔案“iomanip.h”。 常用的流控制符及其功能如下表所示: 表1 I/O流的常用控制符控 |
功能 |
Dec | 十進位制數輸出 |
Hex | 十六進位制輸出 |
Oct | 八進位制數輸出 |
setfill© | 在給定的輸出域寬度內填充字元c |
setprecison(n) | 設顯示小數精度為n位 |
setw(n) | 設域寬為n個字元 |
setiosflags(ios::fixed) | 固定的浮點顯示 |
setiosflags(ios::scientific) | 指數顯示 |
setiosflags(ios::left) | 左對齊 |
setiosflags(ios::right) | 右對齊 |
setiosflags(ios::skipws) | 忽略前導空白 |
setiosflags(ios::uppercase) | 十六進位制數大寫輸出 |
setiosflags(ios::lowercase) | 十六進位制數小寫輸出 |
setiosflags(ios::showbase) | 當按十六進位制輸出資料時,前面顯示前導符0x;當按八進位制輸出資料時,前面顯示前導符0 |
Endl | 輸入一個換行符並重新整理流 |
ios |
istream |
ostream |
ifstream |
iostream |
ofstream |
fstream |
ios |
istream |
ostream |
ifstream |
iostream |
ofstream |
fstream |
類名 | 說明 | 程式設計中需要包含的標頭檔案 |
ios | 流基類,是抽象類 | ostream.h |
istream | 通用輸入流類和其它輸入流類的基類 | iostream.h |
ifstream | 輸入檔案流類 | fstream.h |
ostream | 通用輸出流類和其它輸出流類的基類 | iosream.h. |
ofstream | 輸出檔案流類 | fstream.h |
iostream | 通用I/O流類和其它I/O流的基類 | iostream.h |
fstream | I/O檔案流類 | fstream.h |
檔案開啟方式 | 含義 |
ios::in | 以輸入(讀)方式開啟檔案 |
ios::out | 以輸出(寫)方式開啟檔案 |
ios::app | 開啟一個檔案使新的內容始終新增在檔案的末尾 |
ios::ate | 開啟一個檔案使新的內容新增在檔案尾,但下次新增時,寫在當前位置處 |
ios::trunc | 若檔案存在,則清除檔案所有內容;若檔案不存在,則建立新檔案 |
ios::binary | 以二進位制方式開啟檔案,預設時以文字方式開啟檔案 |
ios::nocreate | 開啟一個已有檔案,若該檔案不存在,則開啟失敗 |
ios::noreplace | 若開啟的檔案已經存在,則開啟失敗 |
函式原型 | 說明 |
get(char &ch) | 從檔案中讀取一個字元 |
getline(char *pch,int count,char delim=’/n’) | 從檔案中讀取多個字元,讀取個數有引數count決定,引數delim 是讀取字元是指定的結束符(預設為換行字元) |
read(char *pch,int count) | 從檔案中讀取多個字元,讀取個數由引數counnt決定 |
put(char ch) | 向檔案寫入一個字元 |
write(const char *pch,int count) | 向檔案寫入多個字元,字元個數由count決定 |