C++->文件流的輸入輸出
1.書本里以“簡單事務處理”為例子,解析二進制輸入輸出文件流的read和write函數的使用,以及輸入輸出文件流 過程中指針的捕獲、定位,文件流位置的判斷,二進制文件轉換為文本文件。
1.1.二進制文件流的read函數的原型:read(char *buffer,streamsize size);
1.2.二進制文件流的write函數的原型:write(char *buffer,streamsize size); 注釋:這里buffer是一塊內存的地址,用來存儲或讀出數據。參數size是一個整數值,表示用從緩存(buffer)中讀出或寫入的字符數。
1.3.移動,獲取指針位置函數
1.3.1.移動讀、寫指針位置
istream&/input.seekg(20,ios::beg); //以流開始位置為基准,后移20個字
istream&/input.seekg(-10,ios::cur); //以指針當前位置為基准,前移10個字
istream&/input.seekg(-10,ios::end); //以指針結尾位置為基准,前移10個字
ostream&/output.seekp()移動(寫讀)指針位置與seekg類似,
ostream&/output.seekp(120); //output流的寫指針移到第120個(字節)處
input.tellg()返回讀指針的當前位置值,要求返回值為long型
output.tellp()返回(寫讀)指針的當前位置值,要求返回值為long型
input.seekg(0,ios::beg); long posBeg=input.tellg(); //返回讀指針的當前位置(文件開始位置)值
output.seekp(0,ios::end); long posEnd=output.tellp(); //返回寫讀指針的當前位置(文件末尾位置)值 在讀文件流時既可以用“返回讀指針當前位置值”函數,(也可以用“返回讀寫指針當前位置值”函數)來判斷指針當前位置;
------------------------------------------------------------------------------------------------------------------------
1.4.C++判斷指針當前位置需要三步,
第一步:把指針移到目標位置用istream/ostream &seekg/p(0/1/-1,ios::beg/cur/end)/seekg/p(long pos)函數,
第二步:用long pos=istream/ostream.tellg/p();獲取指針當前位置值,
第三步:用判斷語句對文件流移動指針位置值與獲取目標指針位置值進行對比,得出運行結果。
1.5.與C語言的不同在於,C語言的位置變動只有rewind(fp1)函數、fseek(fp,100L,0/1/2)函數、ftell()函數, 只要指針移到對應的位置就可以對文件流進行讀寫,讀和寫指針不區分開來;
1.5.1.rewind(fp1):使位置指針重新返回文件的開頭;
1.5.2.fseek()函數對文件流進行順序和隨機讀寫: fseek(文件類型指針,位移量,起始點), “起始點”用0、1或2代替,0代表“文件開始”-SEEK_SET,1為“當前位置”-SEEK_CUR,2為“文件末尾”-SEEK_END;位移量
的數據類型要求為long型,這樣當文件的長度大於64K時不致於出問題。
1.5.3.ftell():得到流式文件中的當前位置,如果ftell()函數返回值為-1L,表示出錯,long i=ftell(fp(文件類型指針));
1.5.4.C語言把文件指針用參數傳遞,C++把文件指針封裝成對象,引用時用文件指針對象+點符號+函數名稱進行使用。