C++檔案操作:開啟檔案和寫入檔案

來源:互聯網
上載者:User

標籤:clu   col   namespace   論文   mes   自動   路徑   class   最小   

 

如果程式的運行結果僅僅顯示在螢幕上,當要再次查看結果時,必須將程式重新運行一遍;而且,這個結果也不能被保留。
如果希望程式的運行結果能夠持續保留下來,供隨時查閱或取用,則需要將其儲存在檔案中。

檔案分類

外部檔案和內部檔案

  1. 外部檔案:指磁碟檔案,也是通常所謂的檔案。
  2. 內部檔案:指在程式中啟動並執行檔案,更正式的稱謂是“檔案流對象”。
  3. 程式中操作的是內部檔案,最後儲存的是外部檔案。

文字檔和二進位檔案

  1. 文字檔:由字元序列組成,以字元(character) 為存取最小資訊單位,也稱“ASCII碼檔案”。
  2. 二進位檔案:由位元組成。
使用過程

本節只討論文字檔的使用方法和操作過程及其簡單應用。
使用文字檔的過程是固定的,一般步驟如下:

(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++檔案操作:開啟檔案和寫入檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.