生活随笔
收集整理的這篇文章主要介紹了
c++中的IO流
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
c語言中的IO操作
標準類型的輸入輸出:
輸入------>數據來源是通過鍵盤進行輸入 輸出------>程序中的數據輸出到控制臺
c語言中:
文件類型的輸入和輸出
輸出:數據從 文件中讀取 輸出:將程序中的數據輸出到文件中
對輸入輸出緩沖區的理解: 1.可以屏蔽掉低級I/O的實現,低級I/O的實現依賴操作系統本身內核的實現,所以如果能夠屏蔽這部分的差異,可以很容易寫出可移植的程序 。 2.可以使用這部分的內容實現“行”讀取的行為,對于計算機而言是沒有“行”這個概念 ,有了這部分,就可以定義“行”的概念,然后解析緩沖區的內容,返回一個“行”。
C++IO流
cerr和clog標準錯誤輸出流,輸出設備是顯示器在流類庫中,最重要的兩部分功能為標準輸入/輸出 (standard input/output)和文件處理。在C++的流類庫中定義了四個全局流對象:cin,cout,cerr和 clog cin標準輸入流對象,鍵盤為其對應的標準設備;cout標準輸出流對象,顯示器為標準設備。 在新庫中要使用這四個功能,必須包含文件并引入std標準命名空間
為什么c++中cout和cin不需要格式串?
因為把所有的內置類型都進行了輸出運算符的重載
注意
cin為緩沖流。鍵盤輸入的數據保存在緩沖區中,當要提取時,是從緩沖區中拿。如果一次輸入過多,會留在那兒慢慢用,如果輸入錯了,必須在回車之前修改,如果回車鍵按下就無法挽回了 。只有把輸入緩沖區中的數據取完后,才要求輸入新的數據。不可能用刷新來清除緩沖區,所以不能輸錯,也不能多輸 輸入的數據類型必須與要提取的數據類型一致,否則出錯。出錯只是在流的狀態字state中對應位置位置,程序繼續。 空格和回車都可以作為數據之間的分格符,所以多個數據可以在一行輸入,也可以分行輸入。但如果是字符型和字符串,則空格(ASCII碼為32)無法用cin輸入,字符串中也不能有空格。回車符也無法讀入。
c語言中文件操作
文件分類
文本格式文件 二進制格式文件
按照文本方式寫: fwrite—>(buf,單個元素的字節,總共多少個元素,文件指針)
int a
= 12345678 ;
int b
= atoi ( str
) ;
char sz
[ 32 ] = { 0 ) ;
itoa ( a
, sz
, 10 ) ;
fwrite ( & a
, sizeof ( a
) , 1 , pf
) ;
fwrite ( sz
, 1 , strlen ( sz
) , pf
) ;
常用文件操作的函數
fopen(“文件路徑”,“文件的格式”)—>操作文件的格式
r 打開只讀文件,該文件必須存在。
r
+ 打開可讀寫的文件,該文件必須存在。
rb 打開一個二進制文件,只讀。
rb
+ 以讀
/ 寫方式打開一個二進制文件。
w 打開只寫文件,若文件存在則文件長度清為
0 ,即該文件內容會消失。若文件不存在則建立該文件。
w
+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
wb 打開一個二進制文件,只寫。
wb
+ 以讀
/ 寫方式建立一個新的二進制文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a
+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。
ab 打開一個二進制文件,進行追加 。
ab
+ 以讀
/ 寫方式打開一個二進制文件進行追加 。
fclose() fread() fwrite() fgetc() fputc() fgets() fputs()
更多詳情請參考這里
如何檢測一個文件是否讀到結尾
檢測文本文件格式可以,二進制文件不行 EOF是文件的結尾標記 在 一個字節里保存了-1,文件里的數據-1按照兩個字節來進行存儲,一個是符號一個是1。
while ( EOF != ( ch
= fgetc ( ) ) )
c++中的文件操作
定義一個文件流對象 ifstream ifile(只輸入用) ofstream ofile(只輸出用) fstream iofile(既輸入又輸出用) 使用文件流對象的成員函數打開一個磁盤文件,使得文件流對象和磁盤文件之間建立聯系 使用提取和插入運算符對文件進行讀寫操作,或使用成員函數進行讀寫 關閉文件
#include <fstream>
struct ServerInfo
{ char _ip
[ 32 ] ; int _port
;
} ; struct ConfigManager
{
public : ConfigManager ( const char * configfile
= "bitserver.config" ) : _configfile ( configfile
) { } void WriteBin ( const ServerInfo
& info
) { ofstream
ofs ( _configfile
, ifstream
:: out
| ifstream
:: binary
) ; ofs
. write ( ( const char * ) & info
, sizeof ( ServerInfo
) ) ; ofs
. close ( ) ; } void ReadBin ( ServerInfo
& info
) { ifstream
ifs ( _configfile
, ifstream
:: in
| ifstream
:: binary
) ; ifs
. read ( ( char * ) & info
, sizeof ( ServerInfo
) ) ; ifs
. close ( ) ; } void WriteText ( const ServerInfo
& info
) { ofstream
ofs ( _configfile
) ; ofs
<< info
. _ip
<< endl
; ofs
<< info
. _port
<< endl
; ofs
. close ( ) ; } void ReadText ( ServerInfo
& info
) { ifstream
ifs ( _configfile
) ; ifs
>> info
. _ip
; ifs
>> info
. _port
; ifs
. close ( ) ; }
private : string _configfile
;
} ; int main ( )
{ ConfigManager cfgMgr
; ServerInfo wtinfo
; ServerInfo rdinfo
; strcpy ( wtinfo
. _ip
, "127.0.0.1" ) ; wtinfo
. _port
= 80 ; cfgMgr
. WriteBin ( wtinfo
) ; cfgMgr
. ReadBin ( rdinfo
) ; cout
<< rdinfo
. _ip
<< endl
; cout
<< rdinfo
. _port
<< endl
; cfgMgr
. WriteText ( wtinfo
) ; cfgMgr
. ReadText ( rdinfo
) ; cout
<< rdinfo
. _ip
<< endl
; cout
<< rdinfo
. _port
<< endl
; return 0 ;
}
創作挑戰賽 新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔 為你收集整理的c++中的IO流 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。