檔案處理
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