1. 程式人生 > >c++檔案流基本用法(fstream, ifstream)

c++檔案流基本用法(fstream, ifstream)

c++的檔案流處理其實很簡單,前提是你能夠理解它。檔案流本質是利用了一個buffer中間層。有點類似標準輸出和標準輸入一樣。

c++ IO的設計保證IO效率,同時又兼顧封裝性和易用性。本文將會講述c++檔案流的用法。

有錯誤和疏漏的地方,歡迎批評指證。

需要包含的標頭檔案: <fstream> 

名字空間: std

也可以試用<fstream.h>

fstream提供了三個類,用來實現c++對檔案的操作。(檔案的建立,讀寫)。
ifstream -- 從已有的檔案讀

ofstream -- 向檔案寫內容

fstream - 開啟檔案供讀寫

支援的檔案型別

實際上,檔案型別可以分為兩種: 文字檔案和二進位制檔案.

文字檔案儲存的是可讀的字元, 而二進位制檔案儲存的只是二進位制資料。利用二進位制模式,你可以操作影象等檔案。用文字模式,你只能讀寫文字檔案。否則會報錯。

例一: 寫檔案

宣告一個ostream變數

  1. 呼叫open方法,使其與一個檔案關聯
  2. 寫檔案
  3. 呼叫close方法.
    #include<iostream>
    #include<fstream>
    using namespace std;
    int main()
    {
    	ofstream file;
    	file.open("file.txt");
    	file<<"Hello file/n"<<75;
    	file<<"string/n";
    	file.put('c');
    	file.close();
    }

    可以像試用cout一樣試用操作符<<向檔案寫內容.
    Usages:
    file<<"string/n";
    file.put('c');
    例二:  讀檔案
    1. 宣告一個ifstream變數.
    2. 開啟檔案.
    3. 從檔案讀資料
    4. 關閉檔案.
    #include<iostream>
    #include<fstream>
    using namespace std;
    
    int main()
    {
    	ifstream file;
    	char output[100];
    	char x;
    	file.open("file.txt",ios::in|ios::out);
    	//file>>output;
    	//cout<<output;
    	file>>x;
    	cout<<x;
    	file.close();
    	
    	//讀取檔案時候 遇到空格會自動停止
    	//並輸出0 
    	//output定義的長度和大小是100
    	//如果超出這個長度 程式會崩潰停止執行 
    	//int x   x 為int 型別的話無法返回字元型 且只能返回一個字元 
    }
    file>>char *;		
    	file>>char;			
    	file.get(char);		
    	file.get(char *,int);	
    	file.getline(char *,int sz);
    	file.getline(char *,int sz,char eol);

    1.同樣的,你也可以使用建構函式開開啟一個檔案、你只要把檔名作為建構函式的

    第一個引數就可以了。


    ofstream file("fl.txt");
    ifstream file("fl.txt");
    上面所講的ofstream和ifstream只能進行讀或是寫,而fstream則同時提供讀寫的功能。
    void main()
    {
    	fstream file;
     
    	file.open("file.ext",ios::in|ios::out)
     
    	//do an input or output here
     
    	file.close();
    }
    open函式的引數定義了檔案的開啟模式。總共有如下模式
    屬性列表
     
    ios::in 		讀
    ios::out		寫
    ios::app		從檔案末尾開始寫
    ios::binary       二進位制模式
    ios::nocreate	開啟一個檔案時,如果檔案不存在,不建立檔案。
    ios::noreplace	開啟一個檔案時,如果檔案不存在,建立該檔案
    ios::trunc		開啟一個檔案,然後清空內容
    ios::ate		開啟一個檔案時,將位置移動到檔案尾

    Notes

    • 預設模式是文字
    • 預設如果檔案不存在,那麼建立一個新的
    • 多種模式可以混合,用|(按位或)
    • 檔案的byte索引從0開始。(就像陣列一樣)

    我們也可以呼叫read函式和write函式來讀寫檔案。

    檔案指標位置在c++中的用法:

    	ios::beg		檔案頭
    	ios::end		檔案尾
    	ios::cur		當前位置
    例子:

    1. file.seekg(0,ios::end);
    2. int fl_sz =file.tellg();
    3. file.seekg(0,ios::beg);
      #include<iostream>
      #include<fstream>
      using namespace std;
      int main()
      {
      	char ch;
      	ifstream file("kool.cpp",ios::in|ios::out);
      	if(file.good())
      	{
      		cout<<"The file has been opened without problem";
      	}
      	else 
      	cout<<"An error has happened on opening the file";	
      		
      	
      	while(!file.eof())//輸出 
      	{
      		file>>ch;
      		cout<<ch;
      	}
      }

      常用的錯誤判斷方法:

      1. good() 如果檔案開啟成功
      2. bad() 開啟檔案時發生錯誤
      3. eof() 到達檔案尾例子: