C++檔案流狀態的判別與定位
》檔案流狀態的判別
可以用檔案流物件的下列成員函式來判別檔案流的當前狀態:
# is_open():判定流物件是否與一個開啟的檔案相聯絡,若是,返回true,否則返回false
# good():剛進行的操作成功時返回true,否則返回false
# fail():與good()相反,剛進行的操作失敗時返回true,否則返回false
# bad():如果進行了非法操作返回true,否則返回false
# eof():進行輸入操作時,若到達檔案尾返回true,否則返回false
》檔案流的定位
C++流的定位操作主要針對檔案流。
(1)檔案位置與定位方式
C++流的位置有兩種:輸入(get)位置和輸出(put)位置。輸入流只有輸入位置,流物件中標誌這種位置的指標稱為輸入指標。輸出流只有輸出位置,流物件中標誌這種位置的指標稱為輸出指標。輸入輸出流兩種位置都有,因而同時具備輸入指標和輸出指標,這兩個指標可以分別加以控制,互不干擾。檔案流中這兩個指標統稱檔案指標。
每一次輸入或輸出都是從指標所指定的位置處開始的,指標在輸入輸出過程中不斷移動,完成輸入輸出後即指向下一個需要輸入輸出的位置。
C++流中既可以對檔案指標進行絕對定位,也可以相對定位。對檔案指標進行相對定位時有三種參考位置,它們是定義在ios_base::seek_dir中的一組列舉符號:
# ios_base::beg 相對於檔案首
# ios_base::cur 相對於當前位置(負數表示當前位置之前)
# ios_base::end 相對於檔案尾
(2)輸入定位
輸入流物件中與輸入定位有關的成員函式:
#istream_type& seekg(off_type& off,ios_base::seek_dir dir);
按方式dir將輸入定位於相對位置off處,函式返回流物件本身的引用。例如:假設input是一個istream型別的流
input.seekg(-1000,ios::cur);
表示使讀指標指向以當前位置為基準向前移動100個位元組處。
#pos_type tellg();
返回當前的輸入位置,即從流開始處到當前位置的位元組數。
#bool eof() const;
判定輸入流是否結束,結束時返回true,否則返回false
(3)輸出定位
在輸出流物件中與輸出定位有關的成員函式:
#ostream_type& seekp(pos_type pos);
(絕對定位)將輸出流定位於絕對位置pos,函式返回流物件本身的引用。
#ostream_type& seekp(off_type off,ios_base::seekdir dir);
(相對定位)按方式dir將輸出流定位於相對位置off處,函式返回流物件本身的引用。
#pos_type tellp();
返回當前的輸出位置(pos_type通常就是long),即從流開始處到當前位置的位元組數。