檔案處理                                                                                2011/10/28 (c)謝碧景編製更新

一、串流

(一)串流(或資料流)

C++ 語言提供 I/O 裝置(如:螢幕、鍵盤、記憶體、磁碟)的存取採串流方式,串流是一連串的資料,以 fstream類別將資料讀取或寫入檔案儲存,語法格式如下:

 #include <fstream.h>                               //引用 <fstream.h> 標頭檔

 fstream file;                                            //宣告一個 fstream 物件

 file open("Readme.txt",ios::in);                 //以讀取模式開啟 Readme.txt 檔

 

(二) fstream 物件的 open 函數

 fstream 物件的 open 函數中有兩個參數,一個是檔名,另一個是開啟檔案的模式參數,常用的模式參數如下:

 模式參數

說明

 ios::in

檔案開啟為讀取狀態

 ios::out

檔案開啟為寫入狀態

 ios::ate

從檔案結尾讀取及寫入資料

 ios::app

將資料附加在檔案結尾

 ios::trunc

如果檔案存在,就清除檔案內的資料

(三)常用的檔案處理函數

 函數

說明

 open(file,mode)

以 mode 模式開啟名為 file 的檔案

 close()

關閉檔案

 is_open()

檢查檔案是否為開啟狀態,若是則傳回 true,否則傳回 flase

 eof()

判斷是否至檔案結尾

 write(buffer,n)

將 buffer 陣列中 n 個字元寫入至檔案中

二、檔案讀取

常用的檔案讀取方式,如下:

 read(buffer,n)

自目前位置至檔案結尾為止,讀取 n 個字元至 buffer 陣列

 get(ch)

讀取一個字元至 ch 字元變數

 getline(buffer,sizeof(buffer))

讀取一行至buffer陣列

執行結果  readme.txt 文字檔

註:本例為一次讀取全部的檔案資料;若需字元逐一讀取,可用 file.get(ch) 為一次讀取一個字元,並將檔案指標移至下一個字元,直到 eof() 則結束讀取。

註:標頭檔 <fstream.h> .h 可省略。

註:使用 file.getline(buffer) 可讀取一行的檔案資料。

三、資料寫入檔案

(一)將資料輸出至檔案

語法格式:

 #include <fstream.h>                               //引用 <fstream.h> 標頭檔

 fstream file;                                            //宣告一個 fstream 物件

 file open("text.txt",ios::out);                     //以寫入模式開啟 text.txt 檔

(二)執行寫入檔案的方式

如下列兩種方式:

 方式一】   file<<資料;

語法格式與 cout 相同,都是串流資料的寫入動作,差異性在 file 是將資料寫入檔案,而 cout 是將資料顯示在螢幕上。

執行結果  資料寫入 text.txt 文字檔

 

 方式二】   file.write(buffer,n)             //將 buffer 陣列中 n 個字元寫入檔案

執行結果:輸入資料  新增資料附加在檔案結尾 text.txt 文字檔

註:(1) file.open("text.txt", ios::out | ios::app); 若傳入的模式參數超過兩個,可用『|』符號分開。
  (2) char buffer[n] 以字元陣列儲存 cin.getline(buffer,strlen(buffer),'\n') 函式輸入的字串。

  (3)在 cin.getline(buffer,strlen(buffer),'\n') 輸入的資料可包括『空白鍵』、『Tab鍵』但輸入『Enter』鍵則結束輸入