1.c++中將資料從乙個物件到另乙個物件的傳遞抽象為「流」,流分為輸入流和輸出流,資料的輸入輸出都是通過i/o流來實現的,將執行i/o操作的類體系稱為流類庫。
2.c++提供了強大的流類庫,有三套實現i/o的方法:第一套是和c語言相容的i/o庫函式;第二套是i/o流類庫,在linux適合第二套;第三套是針對windows程式設計提供的類庫。
3.c++通過過載運算子《和》支援類和物件的輸入輸出,是以位元組流的形式實現,具有方向性。
4.c++ 專門內建了一些供使用者使用的類,在類中封裝了可以實現輸入輸出操作的函式,這些類統稱為i/o流類。
5.共有4個標準流類物件:cin物件、cout物件、cerr物件、clog物件;其中後兩個都是輸出錯誤資訊,只不過cerr是非緩衝方式,而clog物件帶有緩衝區,區別是前者立即輸出,而後者是先將錯誤資訊放入緩衝區,待緩衝區滿了後再進行輸出。iostream就是乙個類,由它提供的公共介面來實現i/o操作。
2.c++提供了三個檔案輸入輸出流類:ofstream(檔案輸出即寫)、ifstream(檔案輸入即讀)、fstream(即可寫又可讀);並建立了三個相應流即定義流類的物件:out、in、inout;類ios為流類庫的基類,其他流類如istream、ostream、iostream都是由該基類派生而來,而ofstream、ifstream、fstream分別由前三個類派生而來。
4.開啟方式:#include
ifstream in;
in.open("路徑名「,ios::nocreate);
if(in.fail())
cout《檔案不存在
in.close
5.文字檔案讀寫:對文字檔案進行讀寫時,要先以某種方式開啟檔案,然後使用<<>>進行操作即可,
ofstream fout(「檔案路徑名」)//其中fout為定義的物件流,將fout和檔案~相關聯,且須注意,這句語句必須連貫寫出來,否則會報錯
fout<<「你好」<>c;//將該檔案的內容讀入記憶體,用記憶體中的乙個陣列
來接受從檔案讀入的內容
fin.close()
6.從上面分析我們可以看出,標準輸入輸出流將鍵盤和顯示器作為預設的輸入輸出檔案,而使用使用者自定義的檔案輸入輸出流就可以自定義相關聯的檔案進行輸入輸出,進而完成檔案讀寫。
7.在實際操作過程中,我們會遇到從檔案讀取內容到陣列中時,我們會發現陣列遇到空格便停止接受。此時,我們便不能再用fin>>操作,而是用fin.getline(陣列名,長度,自定義終結符),否則預設是換行符。
注意:這裡必須是字元型陣列
8.二進位制檔案讀寫操作:文字檔案和二進位制檔案區別:前者是字元流,後者是位元組流;兩者相同點即任何檔案都可以以文字方式或者二進位制方式開啟,且二進位制檔案在進行讀寫操作時應當先進行開啟操作。開啟有兩種方式:第一種是ifstream infile(檔案路徑名,開啟方式–預設是文字檔案,如果想以二進位制的形式開啟,可以ios::binary);第二種是open的形式即inflie.open(檔名,是輸入還是輸出 | 二進位制還是文字形式)
9.對於二進位制方式開啟的檔案,可以使用函式read()和write()進行讀寫操作
使用方法:infile.read(緩衝區首位址char*,讀入的位元組數),outfile.write(buff首位址,寫入的位元組數)。
10.注意:輸出檔案是寫,輸入檔案是讀,n=infile.gcount()//表示實際讀取的位元組數
11.小細節:開啟檔案失敗很有可能是你的檔案路徑名不對,應當以/開頭,或者檔案不存在。
1.前面介紹的檔案讀寫都是按照順序進行的,稱為順序讀寫檔案,只能按照檔案中排列的順序乙個個訪問資料,但有些時候,我們需要從檔案的某個位置讀寫即隨機讀寫。
2.實現方式是通過移動檔案指標達到隨機訪問的目的,而移動檔案指標的成員函式有seekg()和seekp(),前者是輸入流,後者是輸出流 。
3.還可以定義既可輸入又可輸出的檔案,如fstream iofile(「檔案路徑名」,ios::in | ios::out | ios::binary)。
4.iofile.seekg(50,ios::cur)//表示從當前指標往後移50個位元組
iofile.seekp(-50sizeof(stud[0],ios::beg)//表示從檔案開始位置往前移50個自定義結構體單位大小
iofile.seekg(-50,ios::end)//表示從末尾前移50個位元組
iofile.read((char&(stud[i]),sizeof(stud[i])
C 學習軌跡之extern C作用
1.extern c 的主要作用就是為了能夠正確實現c 呼叫其他c語言 加上extern c 後,會指示編譯器這部分 按c語言 而不是c 的方式進行編譯。由於c 支援函式過載,因此編譯器編譯函式的過程中會將函式的引數型別也加到編譯後的 中,而不僅僅是函式名 而c語言並不支援函式過載,因此編譯c語言 ...
c 學習筆記之檔案操作
一 文字檔案操作 1.檔案作為輸入資料,也就是從檔案中讀資料。定義乙個檔案物件類 ifstream input titile 後面可以加入其他定義的特性 include include include using namespace std void main input.close delete ...
c 學習筆記之檔案操作
filestream常用的屬性和方法 屬性 canread 判斷當前流是否支援讀取,返回bool值,true表示可以讀取 canwrite 判斷當前流是否支援寫入,返回bool值,true表示可以寫入 方法 read 從流中讀取資料,返回位元組陣列 write 將位元組塊 位元組陣列 寫入該流 se...