1.文件的打開方式
1.文本打開
在windows中,寫入時會將\n換成\r\n,讀出時\r\n會讀出\n
linux對\n讀寫不做處理
2.二進制打開
對\n讀寫不做處理
2.文本讀寫
1.數據要先變成字符串再寫進緩沖區
2.字符串直接寫進緩沖區就是
3.c++對文本讀寫的支持
istream/ostream中重載了對內置類型的<<和>>,可以把內置類型變成字符串再寫入緩沖區
對于自定義類型,需要用友元自己重載<<和>>
3.二進制讀寫
1.直接對字節進行讀寫
2.c++對二進制讀寫的支持
istream/ostream的write可以從特定位置讀n個字節并寫入,read可以從緩沖區讀n個字節寫入所給的緩沖區
4.文件打開方式和文件讀寫方式不一樣
看了上面我們就能發現,文件的打開方式和真實文件讀寫方式其實還真可以不一樣,打開方式只會影響\n并且還只有windows文本打開時有這個破規矩,而真實讀寫方式實際上是由讀寫時調用的接口決定的,調的是<<和>>這種會進行把數據變成字符串的接口那不就是文本讀寫,調的是write和read這種對字節直接進行讀寫的接口,那不就是二進制讀寫嗎?
當然你像如果是讀寫字符串那不管是<<還是write實際上都一樣
盡管可以打開方式和讀寫方式不一樣,但我們推薦對應著用
C++語言中的文本讀寫和二進制讀寫接口
C++通過標準庫<fstream>
提供了更面向對象的文件讀寫方式,比C語言的接口更加類型安全且易于使用。以下是主要的接口:
文本讀寫接口
-
文件流類
-
std::ifstream
?- 輸入文件流(用于讀取) -
std::ofstream
?- 輸出文件流(用于寫入) -
std::fstream
?- 輸入輸出文件流
-
-
常用文本讀寫方法
-
operator<<
?- 格式化輸出(寫入) -
operator>>
?- 格式化輸入(讀取) -
getline(istream&, string&)
?- 讀取一行到string -
get()
?- 讀取單個字符 -
put()
?- 寫入單個字符
-
-
狀態檢查
-
good()
?- 流狀態正常 -
eof()
?- 到達文件末尾 -
fail()
?- 操作失敗 -
bad()
?- 嚴重錯誤
-
二進制讀寫接口
-
二進制模式打開
-
使用
std::ios::binary
標志打開文件
-
-
二進制讀寫方法
-
read(char* s, streamsize n)
?- 讀取二進制數據 -
write(const char* s, streamsize n)
?- 寫入二進制數據
-
-
文件定位
-
seekg()
/seekp()
?- 設置讀/寫位置 -
tellg()
/tellp()
?- 獲取讀/寫位置
-
通用文件操作
-
文件打開/關閉
-
open()
?- 打開文件 -
close()
?- 關閉文件 -
構造函數中直接指定文件名打開
-
-
模式標志
-
in
?- 讀模式 -
out
?- 寫模式 -
app
?- 追加模式 -
trunc
?- 截斷模式 -
binary
?- 二進制模式 -
text- 文本模式(默認模式)
-