按此前往C++完整教學目錄

 

* 朋友們若是覺得本教學對您有幫助,請點個讚~

 

檔案的輸入與輸出:

資料過大時,利用檔案來管理輸入和輸出是較好的選擇。

ofstream 類別物件可以用來管理檔案的輸出。

ifstream 類別物件可以用來管理檔案的輸入。

以上兩者在使用時,需在標頭檔上加入#include <fstream>

(1)利用建構式建立ofstream物件:

(1-1)

ofstream 檔案輸出物件名稱;

檔案輸出物件名稱.open(“檔案路徑名稱” , 檔案設定參數); //開啟路徑名稱中的檔案,並且利用參數選擇開啟的方法

以下是常用的檔案設定參數

ios_base::in

開啟檔案準備輸入

ios_base::out

開啟檔案準備輸出

ios_base::app

將欲輸出的資料接在檔案內容的終端

ios_base::ate

開啟檔案並移到檔案內容尾端

ios_base::binary

以二位元方式輸入/輸出檔案

ios_base::trunc

將檔案內容清空

ios_base::nocreate

如路徑上的檔案不存在,則不執行開啟

ios_base::noreplace

如路徑上的檔案存在,則不執行開啟

註:對於檔案輸出物件而言,成員函式open的第二個參數預設為ios_base::out。即:

ofstream 檔案輸出物件名稱;

檔案輸出物件名稱.open(“檔案路徑名稱” ); //這一行相當於檔案輸出物件名稱.open(“檔案路徑名稱” , ios_base::out);

(1-2)更方便的建構式:

ofstream 檔案輸出物件名稱(“檔案路徑名稱” , 檔案設定參數);

註一:ofstream 檔案輸出物件名稱(“檔案路徑名稱”);這一行相當於ofstream 檔案輸出物件名稱(“檔案路徑名稱” , ios_base::out);

註二:若想在同一行輸入兩個以上的檔案設定參數,可使用 | 運算子:

ofstream 檔案輸出物件名稱(“檔案路徑名稱” , 檔案設定參數一 | 檔案設定參數二 | 檔案設定參數三);

(2)利用建構式建立ifstream物件:

(2-1)

ifstream 檔案輸入物件名稱;

檔案輸入物件名稱.open(“檔案路徑名稱” , 檔案設定參數); //開啟路徑名稱中的檔案,並且利用參數選擇開啟的方法。檔案設定參數同上。

對於檔案輸入物件而言,成員函式open的第二個參數預設為ios_base::in。即:

ifstream 檔案輸入物件名稱;

檔案輸入物件名稱.open(“檔案路徑名稱” ); //這一行相當於檔案輸入物件名稱.open(“檔案路徑名稱” , ios_base::in);

(1-2)更方便的建構式:

ifstream 檔案輸入物件名稱(“檔案路徑名稱” , 檔案設定參數);

註一:ifstream 檔案輸入物件名稱(“檔案路徑名稱”);這一行相當於ifstream 檔案輸入物件名稱(“檔案路徑名稱” , ios_base::in);

註二:若想在同一行輸入兩個以上的檔案設定參數,可使用 | 運算子:

ifstream 檔案輸入物件名稱(“檔案路徑名稱” , 檔案設定參數一 | 檔案設定參數二 | 檔案設定參數三);

註三(非常重要):檔案路徑與名稱是個字串,若用變數A來儲存,則A的變數型態只能是傳統字串,並不能是C++字串。

傳統字串宣告方式:

(1) char A[]=”字串值”;

(2) char* A=”字串值”;

若是使用C++字串來宣告,則必須將其轉型為傳統字串,即利用成員函式c_str()

string A=”字串值”;

A.c_str(); //此函式回傳A的傳統字串型式

 

(3)正式執行輸出資料給檔案、從檔案輸入資料的動作,仍是由<<>>這兩個運算子值執行。程式碼例如:

ofstream c1("ttaa.txt");

c1<<"aaa";  //C++編譯軟體安裝的目錄或者是特定的工作區底下,建立一個ttaa.txt檔,其中內容為aaa

c1.close();  //關閉ttaa.txt檔案

string test;

ifstream c2("ttaa.txt"); 

c2>>test;  //ttaa.txt檔的內容輸入給字串test

c2.close();  //關閉ttaa.txt檔案

cout<<test;  //顯示aaa

註一:檔案路徑名稱為ttaa.txt,表示在C++編譯軟體安裝的目錄或者是特定的工作區底下,開啟一個名叫ttaatxt文字檔。如果ttaa.txt本來並不存在,則會自動建立並且開啟。

註二:如要開啟其他路徑下的檔案,則必須輸入全部路徑名。如:C:/test_directory/test.txt D:/game/save/data1.txt 等等。

註三:如沒執行c1.close()c2.close(),可能造成最後的結果無法顯示。

(4)管理、分配檔案內容。

若有tt.txt檔,其內容為:

11111

22222

33333

44444

55555

66666

則撰寫程式碼如:

string test;

ifstream c2("tt.txt");

for(int i=0;i<6;i++)

{getline(c2,test);  //getline(檔案輸入物件名稱 , 變數名稱)這一函式的作用是從tt.txt取出一行資料,並且複製給變數test

if(i%2==0)

{ofstream c1("aa.txt",ios_base::out | ios_base::app);

c1<<test<<endl;c1.close();}

else

{ofstream c1("bb.txt",ios_base::out | ios_base::app);

c1<<test<<endl;c1.close();}

}

c2.close();

執行結果:在C++編譯軟體安裝的目錄或者是特定的工作區底下,建立aa.txt檔和bb.txt檔。

aa.txt內容為:

11111

33333

55555

bb.txt內容為:

22222

44444

66666

 

 

上一篇:檔案管理 輸出排版(2)

下一篇:檔案輸入輸出的定位

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(0) 人氣()