標籤:clu col namespace 論文 mes 自動 路徑 class 最小
如果程式的運行結果僅僅顯示在螢幕上,當要再次查看結果時,必須將程式重新運行一遍;而且,這個結果也不能被保留。
如果希望程式的運行結果能夠持續保留下來,供隨時查閱或取用,則需要將其儲存在檔案中。
檔案分類
外部檔案和內部檔案
- 外部檔案:指磁碟檔案,也是通常所謂的檔案。
- 內部檔案:指在程式中啟動並執行檔案,更正式的稱謂是“檔案流對象”。
- 程式中操作的是內部檔案,最後儲存的是外部檔案。
文字檔和二進位檔案
- 文字檔:由字元序列組成,以字元(character) 為存取最小資訊單位,也稱“ASCII碼檔案”。
- 二進位檔案:由位元組成。
使用過程
本節只討論文字檔的使用方法和操作過程及其簡單應用。
使用文字檔的過程是固定的,一般步驟如下:
(1) 開啟一個檔案,使磁碟檔案和檔案流對象建立聯絡;
(2) 將資料按文本方式寫入一個檔案,就如同cout用於向顯示器送資料。以後可從這個檔案讀取資料,就如同cin用於鍵盤輸入。
(3) 當不再使用檔案時,要關閉檔案,此時檔案將從緩衝區中完全寫回磁碟。這樣,可以永久儲存資料。
操作步驟
1.說明一個檔案流對象(內部檔案)。
例如: ifstream ifile; //說明輸入檔案流對象ifile
ofstream ofile; //說明輸出檔案流對象ofile
說明:
- 檔案流類型ifstream支援從輸入檔案中提取資料的操作。
- 檔案流類型ofstream完成資料寫入輸出檔案中的各種操作。
- ifile是輸入檔案流對象,用於讀;ofile是輸出檔案流對象,用於寫。
2.開啟檔案,在檔案流對象和磁碟檔案之間建立聯絡。
例如: ifile.open( "d:\\my_in_file.txt" );
ofile.open( "d:\\my_out_file.txt" );
說明:
- 雙引號中的字串(如"d:\\my_in_file.txt" )為磁碟檔案路徑名。
- 通過輸入檔案流對象(如ifile)或輸出檔案流對象(如ofile)開啟指定磁碟檔案,將在檔案流對象和磁碟檔案之間建立聯絡。
- 輸入/輸出檔案流對象都被稱為“內部檔案”,即和對應磁碟檔案聯絡的“虛檔案”。
3.對檔案進行讀寫操作。
- 檔案讀寫在檔案緩衝區中進行。
- 最常見的檔案讀寫是順序的,即從檔案頭開始進行。
- 順序讀寫可用C++的提取運算子(>>)和插入運算子(<<)進行;也可以用讀字元的get()和讀字串的getline()等函數進行。
4.關閉檔案。
檔案操作結束後,應該顯式地關閉該檔案,與開啟檔案相對應,例如:
ifile.close();
ofile.close();
關閉檔案時,系統把與該檔案相關聯的檔案緩衝區中的資料寫到磁碟檔案中,保證檔案的完整;同時把磁碟檔案名稱與檔案流對象之間的關聯斷開,可防止誤操作修改了磁碟檔案。
應用舉例
【例2.25】將百雞問題計算結果存入檔案。
1 #include<fstream> 2 #include<iomanip> 3 using namespace std; 4 int main(){ 5 int i,j,k; 6 ofstream ofile; //定義輸出檔案 7 ofile.open("d:\\myfile.txt"); //作為輸出檔案開啟 8 ofile<<" 公雞 母雞 小雞"<<endl; //標題寫入檔案 9 for(i=0;i<=20;i++)10 for(j=0;j<=33;j++){11 k=100-i-j;12 if((5*i+3*j+k/3==100)&&(k%3==0)) //注意(k%3==0)非常重要13 ofile<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl; //資料寫入檔案14 }15 ofile.close(); //關閉檔案16 return 0;17 }
【例2.26】讀出存放百雞問題計算結果的檔案
1 #include<fstream> 2 #include<iostream> 3 #include<iomanip> 4 using namespace std; 5 int main(){ 6 char a[28]; 7 ifstream ifile; //定義輸入檔案 8 ifile.open("d:\\myfile.txt"); //作為輸入檔案開啟 9 int i=0,j,k;10 while(ifile.get(a[i])){ //讀標題,請對比cin.get(),不可用>>,它不能讀白字元11 if(a[i]==‘\n‘) break;12 i++;13 }14 a[i]=‘\0‘;15 cout<<a<<endl;16 while(1){17 ifile>>i>>j>>k; //由檔案讀入資料18 if(ifile.eof()!=0) break; //當讀到檔案結束時,ifile.eof()為真19 cout<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl; //螢幕顯示 20 }21 ifile.close(); //關閉檔案22 return 0;23 }
重要提示
- 操作步驟的第1、2步可以合并為1步,即說明檔案流對象的同時開啟對應的磁碟檔案。例如:
ifstream ifile( "d:\\my_in_file.txt" ); //說明輸入檔案流對象ifile並開啟檔案
ofstream ofile( "d:\\my_out_file.txt" );//說明輸出檔案流對象ofile並開啟檔案
- 開啟檔案時,如磁碟檔案不存在,會自動建立檔案,但指定目錄必須存在,否則建立檔案失敗。
- 電腦將外部裝置也作為檔案進行管理。例如:鍵盤和顯示器是標準的輸入輸出檔案,其檔案名稱分別為cin和cout。
- 磁碟檔案操作與鍵盤、顯示器操作非常相似。例題中用輸出檔案流對象(如ofile)代替cout,輸入檔案流對象(如ifile)代替cin,資料的去向和來源則由顯示器和鍵盤變為磁碟檔案。
- 對檔案進行操作,必須在程式前增加一句: #include<fstream>
C++檔案操作:開啟檔案和寫入檔案