程序產(chǎn)生的數(shù)據(jù)都屬于臨時(shí)數(shù)據(jù),只有持久化到磁盤形成文件才能保存。
C++對文件操作需要包含include <fstream>
文件類型分為2種:文本文件(已a(bǔ)scii碼格式存儲于計(jì)算機(jī)中),二進(jìn)制文件(01進(jìn)制文件保存,用戶直接看不懂)
文件流有3種,ofstream寫操作(輸出流),ifstream讀操作(輸入流),fstream可讀寫操作,注意別少了f否則和標(biāo)準(zhǔn)輸出流搞混
寫文件
步驟如下,導(dǎo)入頭文件,創(chuàng)建文件輸出流對象ostream ofs ,打開文件ofs.open(文件路徑,打開方式),ofs<<重定向內(nèi)容到輸出流,最后ofs.close()關(guān)閉輸出流節(jié)省資源

打開方式如上,我們可以選擇讀方式,寫方式,追加,二進(jìn)制等等,如果想使用二進(jìn)制寫入,就是符合方式,使用或邏輯連接,如 ofs.open("d:/test.bin",ios::out | ios::binary)

如上,我們就實(shí)現(xiàn)了一個(gè)文件的寫入,當(dāng)然我們要記住步驟,還有區(qū)分文件的打開方式。

當(dāng)然我們想寫入文件多行的時(shí)候還是要記得追加換行,如上。
讀文件
也是5步,導(dǎo)入頭文件,創(chuàng)建文件輸入流對象,輸入流ifs.open(文件路徑,打開方式)并判斷是否打開成功,讀取數(shù)據(jù)(可以有4種方式讀?。?,最后關(guān)閉輸入流對象。

如上,我們嘗試打開一個(gè)不存在的文件,先不讀取,可以使用輸入流的is_open()返回是否成功打開,否就輸出失敗。
接下來我們講解4種讀取方式,方式1是創(chuàng)建char數(shù)組,使用循環(huán)讀取

如上,while循環(huán)的條件是ifs往buf里寫數(shù)據(jù),底層是每次復(fù)寫一行,然后循環(huán)到頭就返回標(biāo)志位提示文件讀到頭了,跳出循環(huán)。可以看到右側(cè)輸出結(jié)果
方式2,也是使用char數(shù)組,讀取時(shí)使用文件輸入流的getline方法每次獲取一行,同時(shí)還帶使用char指針的功能。

如上,getline有2個(gè)參數(shù),第一個(gè)是char *指針,我們正好使用數(shù)組名,第二個(gè)是指定字符長度,這里我們就默認(rèn)使用sizeof(buf)即1024,讀取效果是一樣的
方式3,使用字符串讀取,導(dǎo)入string模塊,自帶全局函數(shù)getline,2個(gè)參數(shù),分別是文件流和字符串對象,然后循環(huán)逐行讀取

如上,效果是一樣的。
方式4 按字符逐個(gè)讀取,直到判斷讀取到的是否為EOF文件結(jié)束標(biāo)識。

如上,使用輸入流的get方法,可以獲取逐個(gè)字符,我們判斷字符為EOF時(shí),就停止循環(huán),當(dāng)然這里因?yàn)槭亲址?,是可以輸出換行的,而之前的getline的結(jié)果默認(rèn)不包括換行
二進(jìn)制文件讀寫
二進(jìn)制的操作本質(zhì)和前面一樣,重點(diǎn)是讀寫方式,寫的時(shí)候用的是輸出流的write方法。

如上,這里需要注意的是,我們打開文件是可以在構(gòu)造ofs對象時(shí)傳入的,然后我們要使用write方法寫入,write方法要求要2個(gè)參數(shù),const char *指針和長度,這里長度我們就使用p的長度,結(jié)束后就實(shí)現(xiàn)了將Person實(shí)例p寫入到了文件中,打開可以看到只有張三認(rèn)識,其他都是亂碼,因?yàn)槭嵌M(jìn)制寫入。注意我們非二進(jìn)制寫入時(shí)是使用<<重定向。注意這里的類實(shí)例化使用了像結(jié)構(gòu)體一樣的賦值,雖然沒有講過,但也是可以的。
上面完成了二進(jìn)制的寫入,寫下來我們使用二進(jìn)制的讀取read方法,read方法的2個(gè)參數(shù)還是const char *指針,和長度,即按char類型逐字節(jié)讀回來。

如上,我們使用read方法讀,我們可以給一個(gè)對象的指針,一般轉(zhuǎn)化為char *,因?yàn)槲覀兪前碿har *去寫的,我們將Person對象p的地址傳給read第一個(gè)參數(shù),同時(shí)將其強(qiáng)轉(zhuǎn),我們可以看到p對象的值被寫入。所以讀文件不光可以讀出內(nèi)容,還可以將其賦給對象,當(dāng)然前提是對象按對應(yīng)形式存儲。