* 朋友們若是覺得本教學對您有幫助,請點個讚~
檔案的輸入與輸出:
資料過大時,利用檔案來管理輸入和輸出是較好的選擇。
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++編譯軟體安裝的目錄或者是特定的工作區底下,開啟一個名叫ttaa的txt文字檔。如果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
留言列表