从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态
一、文件流
ofstream,由ostream派生而來,用于寫文件
ifstream,由istream派生而來, 用于讀文件
fstream,由iostream派生而來,用于讀寫文件
二、打開文件
說明了流對象之后,可使用函數open()打開文件。文件的打開即是在流與文件之間建立一個連接
函數原型
void open(const char * filename, int mode = ios::out,int prot = _SH_DENYNO);
參數
filename:文件的名稱,可以包含(絕對和相對)路徑
mode:文件打開模式
prot:保護模式
(一)、文件打開模式
打開方式描述
ios::in打開一個供讀取的文件(ifstream流的默認值)
ios::out打開一個供寫入的文件(ofstream流的默認值)
ios::app在寫之前找到文件尾
ios::ate打開文件后立即將文件定位在文件尾
ios::trunc廢棄當前文件內容
ios::nocreate(已不再支持)如果要打開的文件并不存在,那么以此參數調用open()函數將無法進行
ios::noreplace (已不再支持)如果要打開的文件已存在,試圖用open()函數打開時將返回一個錯誤。
ios::binary以二進制的形式打開一個文件,默認為文本文件
(二)、保護模式
#define _SH_DENYRW 0x10 /* deny read/write mode */拒絕對文件進行讀寫
#define _SH_DENYWR 0x20 /* deny write mode */拒絕寫入文件
#define _SH_DENYRD 0x30 /* deny read mode */拒絕文件的讀取權限
#define _SH_DENYNO 0x40 /* deny none mode */讀取和寫入許可
#define _SH_SECURE 0x80 /* secure mode */共享讀取,獨占寫入
注意:假設A進程以_SH_DENYRW 打開,那么是B進程不能再對文件進行讀寫。
(三)、文件打開模式的有效組合
上述所有的打開模式組合還可以添加ate模式。對這些模式添加ate模只會改變文件打開時的初始定位,在第一次讀或
寫之前,將文件定位于文件末尾處。
(四)、文件打開的幾點說明
1、文件打開也可以通過構造函數打開,例如:
ofstream fout(“out.txt“,ios::out);
2、文件的打開方式可以為上述的一個枚舉常量,也可以為多個枚舉常量構成的按位或表達式。
3、使用open成員函數打開一個文件時,若由字符指針參數所指定的文件不存在,則建立該文件。(out)
4、當打開方式中不含有ios::ate或ios::app選項時,則文件指針被自動移到文件的開始位置,即字節地址為0的位置。
5、從效果上看ofstream指定out模式等同于指定了out和trunc模式
6、默認情況下,fstream對象以in和out模式同時打開。
7、當文件同時以in和out打開時不會清空
8、如果只使用out模式,而不指定in模式,則文件會清空現有數據。
9、如果同時指定了out與app,不會清空
10、如果打開文件時指定了trunc模式,則無論是否同時指定了in模式,文件同樣會被清空
三、流狀態
對應于這個標志字各狀態位,ios類還提供了以下成員函數來檢測或設置流的狀態:
bool rdstate(); //返回流的當前狀態標志字
bool eof(); //返回非0值表示到達文件尾
bool fail(); //返回非0值表示操作失敗
bool bad(); //返回非0值表示出現錯誤
bool good(); //返回非0值表示流操作正常
bool clear(int flag=0); //將流的狀態設置為flag
為提高程序的可靠性,應在程序中檢測I/O流的操作是否正常。當檢測到流操作出現錯誤時,可以通過異常處理來解決問題。
四、文件的關閉
每個文件流類中都提供有一個關閉文件的成員函數close()
功能:當打開的文件操作結束后,就需要關閉它,使文件流與對應的物理文件斷開聯系,并能夠保證最后輸出到文件緩沖區中的內容,無論是否已滿,都將立即寫入到對應的物理文件中
函數原型:void close();
文件流對應的文件被關閉后,還可以利用該文件流調用open成員函數打開其他的文件,最好先clear 一下。
C++ Code
|
1 |
#include<cassert> using intmain( assert(fout1); fout1<< fout3.clear(); fout3.close(); |
參考:
C++ primer 第四版
Effective C++ 3rd
C++編程規范
總結
以上是生活随笔為你收集整理的从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可口的披萨美味的披萨夏日篝火节第十三关配
- 下一篇: R7-2 试试多线程 (10 分)