C++文件操做:打開文件和寫入文件

 

若是程序的運行結果僅僅顯示在屏幕上,當要再次查看結果時,必須將程序從新運行一遍;並且,這個結果也不能被保留。
若是但願程序的運行結果可以永久保留下來,供隨時查閱或取用,則須要將其保存在文件中。ios

文件分類

外部文件和內部文件數組

  1. 外部文件:指磁盤文件,也是一般所謂的文件。
  2. 內部文件:指在程序中運行的文件,更正式的稱謂是「文件流對象」。
  3. 程序中操做的是內部文件,最後保存的是外部文件。

文本文件和二進制文件函數

  1. 文本文件:由字符序列組成,以字符(character) 爲存取最小信息單位,也稱「ASCII碼文件」。
  2. 二進制文件:由二進制數組成。

使用過程

本節只討論文本文件的使用方法和操做過程及其簡單應用。
使用文本文件的過程是固定的,通常步驟以下: spa

(1) 打開一個文件,使磁盤文件和文件流對象創建聯繫; code

2) 將數據按文本方式寫入一個文件,就如同cout用於向顯示器送數據。之後可從這個文件讀取數據,就如同cin用於鍵盤輸入。 對象

(3) 當再也不使用文件時,要關閉文件,此時文件將從緩衝區中徹底寫回磁盤。這樣,能夠永久保存數據。blog

操做步驟

1.說明一個文件流對象(內部文件)。 ip

例如:     ifstream ifile;     //說明輸入文件流對象ifile     ci

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  }

重要提示

  • 操做步驟的第一、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>
相關文章
相關標籤/搜索