c++檔案流基本用法(fstream, ifstream)
阿新 • • 發佈:2019-01-07
c++的檔案流處理其實很簡單,前提是你能夠理解它。檔案流本質是利用了一個buffer中間層。有點類似標準輸出和標準輸入一樣。
c++ IO的設計保證IO效率,同時又兼顧封裝性和易用性。本文將會講述c++檔案流的用法。
有錯誤和疏漏的地方,歡迎批評指證。
需要包含的標頭檔案: <fstream>
名字空間: std
也可以試用<fstream.h>
fstream提供了三個類,用來實現c++對檔案的操作。(檔案的建立,讀寫)。
ifstream -- 從已有的檔案讀
ofstream -- 向檔案寫內容
fstream - 開啟檔案供讀寫
支援的檔案型別
實際上,檔案型別可以分為兩種: 文字檔案和二進位制檔案.
文字檔案儲存的是可讀的字元, 而二進位制檔案儲存的只是二進位制資料。利用二進位制模式,你可以操作影象等檔案。用文字模式,你只能讀寫文字檔案。否則會報錯。
例一: 寫檔案
宣告一個ostream變數
- 呼叫open方法,使其與一個檔案關聯
- 寫檔案
- 呼叫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和ifstream只能進行讀或是寫,而fstream則同時提供讀寫的功能。ofstream file("fl.txt"); ifstream file("fl.txt");
void main()
open函式的引數定義了檔案的開啟模式。總共有如下模式{ fstream file; file.open("file.ext",ios::in|ios::out) //do an input or output here file.close(); }
屬性列表 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 當前位置 例子:
- file.seekg(0,ios::end);
- int fl_sz =file.tellg();
- 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; } }
常用的錯誤判斷方法:
- good() 如果檔案開啟成功
- bad() 開啟檔案時發生錯誤
- eof() 到達檔案尾例子: