c++中ifstream,ofstream和fstream的使用方法
阿新 • • 發佈:2019-01-09
一、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中的操縱符: