檔案處理

2013/01/23 謝碧景(c)編製更新

一、串流

(一)串流(或資料流)

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

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

fstream file; //宣告一個 fstream 物件,以fstream類別建立物件file

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

(二) fstream 物件的 open 函數

1.利用 fstream 物件 open 成員函數開啟一個檔案,其參數有兩個一個是檔名,另一個是開啟檔案的模式參數,常用的模式參數如下:

2.若傳入的模式參數超過兩個,可用【|】符號分開,如下:以寫入模式開啟readme.txt 檔,並將資料加至檔案結尾

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

fstream file; //宣告一個 fstream 物件,以fstream類別建立物件file

file.open("readme.txt",ios::out|ios::app); //以寫入模式開啟 readme.txt 檔,並將資料加至檔案結尾

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

二、檔案讀取

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

◆範例1:開啟 readme.txt 檔,自檔案開始讀取 n 個字元資料,並放入 buffer 陣列。

執行結果

readme.txt 文字檔

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

◆範例2:開啟 readme.txt 檔 (同上題),自檔案開始一次讀取一個字元,讀取全部資料,並顯示出 ,執行結果同上。

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

範例3:開啟 readme.txt 檔 (同上題),自檔案開始一行一行讀取,讀取全部資料,並顯示出,執行結果同上。

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

三、資料寫入檔案

(一)將資料輸出至檔案

  • 語法格式:

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

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

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

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

    • 方式一

file<<資料; //將資料寫入檔案,例 file<<"姓名\t座號\n";

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

◆範例4:將資料以串流方式寫入text.txt檔案。

執行結果

寫入 text.txt

  • 方式二

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

◆範例5:將鍵盤輸入之資料以 file.write() 方式寫入text.txt檔案中,並將資料附加在檔案結尾。

執行結果:輸入資料

新增資料附加在檔案結尾 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鍵』則結束輸入。

§實作練習

1:顯示數字和。(取自88年全國資訊學科能力競賽第1題)

設計一個程式讀取 in_a.txt 文字檔(包含文字和數字),將數字相加之後儲存至 out_a.txt 中。

提示:先將數字字串拆解後儲存至字串陣列中,再從字串陣列中取出轉換為數值後相加。】

執行結果

儲存至 out_a.txt