1. 程式人生 > >C++檔案流狀態的判別與定位

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),即從流開始處到當前位置的位元組數。