1. 程式人生 > >c++中ifstream,ofstream和fstream的使用方法

c++中ifstream,ofstream和fstream的使用方法

一、C++中IO庫型別

c++中的IO庫型別和標頭檔案如下:
這裡寫圖片描述
各種IO庫型別對應的繼承關係為:

型別ifsream和istringstream都繼承自istream;
型別ofsream和ostringstream都繼承自ostream;
型別fsream和stringstream都繼承自iostream;

繼承機制的特點就是可以講一個派生類物件當作基類物件來使用。因此我們可以像使用istream物件一樣來使用ifsream和istringstream物件,例如,可以對一個ifsream或istringstream物件呼叫getline,也可以從一個ifsream或istringstream物件中讀取資料,等等。同理,其他型別也可按繼承關係得到類似使用規則。

二、檔案讀寫操作型別

ifstream,ofstream和fstream是實現檔案讀寫操作的型別。部分操作如下:
這裡寫圖片描述

(1)若要建立和使用檔案流物件,可以提供檔名(可選),如果提供了一個檔名,則open自動被呼叫:

ifstream in(ifile);//構造一個ifstream並開啟給定檔案
ofstream out;//構造輸出檔案流,未關聯任何檔案

一旦一個檔案流開啟,它就保持與對應檔案的關聯。為了將檔案流關聯到另一個檔案,必須先關閉已經關聯的檔案,然後再開啟:

in.close();//關閉檔案
in.open(ifile + "2");//開啟另一個檔案

(2)檔案模式:

每個流都有一個關聯的檔案模式,用來指出如何使用檔案。
這裡寫圖片描述

指定檔案格式的限制如下:
這裡寫圖片描述

(3)例子:以下程式碼實現從當前目錄下的input.txt中讀取內容,然後放到陣列a中,或者每次直接輸出buffer。

#include <iostream>                                                                                                                                
#include <fstream>
#include <stdlib.h>
#include <vector> using namespace std; int main(){ char buffer[256]; ifstream in("input.txt");//檔案不存在會返回錯誤 if (! in.is_open()){ cout << "Error opening file"<<endl; exit (1); } vector<string> a; while (!in.eof()){ in.getline (buffer,100); //cout << buffer << endl; a.push_back(buffer); } for(unsigned int i=0;i<a.size();i++) cout<<a[i]<<endl; return 0; }

其中input.txt內容為:

ofstream         //檔案寫操作 記憶體寫入儲存裝置           
ifstream         //檔案讀操作,儲存裝置讀區到記憶體中      
fstream          //讀寫操作,對開啟的檔案可進行讀寫操作 

三、c++中的操縱符

1、定義在iostream中的操縱符:
這裡寫圖片描述
這裡寫圖片描述

2、定義在iomanip中的操縱符:
這裡寫圖片描述