c++ 文件打開模式組合

最近在研究  C++ I/O 操作.. 在文件流部分卡殼了..原因是沒有 真正瞭解到 文件打開模式組合後的各種含義

在搜索了一大堆基本沒什麼用處的資料後,終於找到一個比較全的組合模式了。

 !!需要特別注意的是   ios:in 與ios::out 組合時,在沒有說明ios::trunc 情況下 是不會請空原有記錄的

 原文 :http://blog.csdn.net/xxlyyhappy/article/details/6613168

本文在原文基礎上 添加了一些的東西 豐富了文章內容。

打開模式:

in:打開文件時做讀操作;

out:打開文件時做寫操作;

app:在每次寫之前找到文件尾;

ate:打開文件後立即將文件定位在文件尾;(與ios::app存在區別)

trunc:打開文件時清空已存在的文件流;

binary:以二進制模式進行IO操作;(默認時採用的是 文本文件模式)

有效組合:

並不是所有的打開模式都可以同時制定,有些模式組合是沒有意義的,例如:in和trunc,準備讀取文件流,但是trunc清空了文件流。

out:打開文件時做寫操作,刪除已經存在的數據;

out  |  app:打開文件時做寫操作,在文件尾寫入,不清空已經存在的數據;

out  |  trunc:打開文件時做寫操作,刪除已經存在的數據,與out模式相同;(之所以相同 是因爲默認的構造函數就是用  ios::out|ios|trunc)

in:打開文件時做讀操作;

in  |  out打開文件時做讀寫操作,並定位於文件的開頭處,不清空已經存在的數據;

in  |  out  |  trunc:打開文件時做讀寫操作,刪除文件中已經有的數據;

當文件同時以in out模式打開時,不會清空已有數據;

如果只使用了out,而沒有指定in模式,則會清空已有數據;

如果使用了trunc,不論是否使用了in,都會清空已有的數據(前提是有ios::out);

ifstream 對象 提供默認 文件模式 ios::in;

ofstream 對象提供默認 文件模式 ios::out|ios::trunc;

fstream 對象不提供默認的 文件模式  因此只能自己敲了;

 另外對於二進制文件I/O操作。還涉及到一個概念 隨機存取, 它相對於 文本文件的順序存取而言

所謂順序存取 即 按其在文件中的邏輯順序依次存取的,只能從頭往下讀;有點類似堆棧的概念;

而隨機存取則 另闢蹊徑  使得可以直接在流中的任意位置移動;

隨機存取涉及的函數有以下四個:

seekg(...省略參數)  (g 爲get)seekp(...省略參數)  (p 爲put)  tellg(void)  ,tellp(void);

對於讀文件 使用seekg()  或者 tellg()   (省略了參數)

對於寫文件  使用seekp()  或者 tellp()  (省略了參數)

tellg()  和 tellp()  返回當前流位置;

seekg()  和 seekp() 函數用於設置流位置,C++提供兩種版本

1.只有一個參數  seekg( pos) (用於絕對定位):

seekg(16) 移動到流中位置16上 ,注意流位置從0開始;

2.含有兩個參數(用於相對定位):

例如:seekg( -2,ios::end) ,seekg( 4,ios::beg)  ,第一個參數是 相對偏移量,ios::end 和 ios::beg  爲流常量  分別意爲 流結尾 和 流開頭 。

 -2 (向前移動2個單位),4( 向後移動4個單位)。

seekp()  , tellp() 有相同用法  這裏不再累述。

發佈了3 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章