国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C++中的文件輸入/輸出(4):檢測(cè)輸入/輸出的狀態(tài)標(biāo)志

C++中的文件輸入/輸出(4)

原作:Ilia Yordanov,  loobian@cpp-home.com

 

檢測(cè)輸入/輸出的狀態(tài)標(biāo)志

 

在此我不打算解釋“標(biāo)志(flags)”一詞的含義,不過假如你真的完全不理解關(guān)于這方面的概念,那么將本章讀過一遍之后也許你對(duì)此會(huì)得到一些認(rèn)識(shí),我也相信你同樣能理解這部分的理論。盡管如此,如果你還是不明白標(biāo)志在C++中的含義,我推薦你閱讀一些關(guān)于這個(gè)主題的資料。

好,讓我們開始吧。

C++中負(fù)責(zé)的輸入/輸出的系統(tǒng)包括了關(guān)于每一個(gè)輸入/輸出操作的結(jié)果的記錄信息。這些當(dāng)前的狀態(tài)信息被包含在io_state類型的對(duì)象中。io_state是一個(gè)枚舉類型(就像open_mode一樣),以下便是它包含的值(譯注:表中第一列為枚舉值的名稱,第二列為該值相應(yīng)含義的描述)

 

godbit

無錯(cuò)誤

Eofbit

已到達(dá)文件尾

failbit

非致命的輸入/輸出錯(cuò)誤

badbit

致使的輸入/輸出錯(cuò)誤

 

有兩種方法可以獲得輸入/輸出的狀態(tài)信息。一種方法是通過調(diào)用rdstate()函數(shù),它將返回當(dāng)前狀態(tài)的錯(cuò)誤標(biāo)記(上表中提到的)。例如,假如沒有任何錯(cuò)誤,則rdstate()會(huì)返回goodbit.

另一種方法則是使用下面任何一個(gè)函數(shù)來檢測(cè)相應(yīng)的輸入/輸出狀態(tài):

 

bool bad();

bool eof(); //還記得它么?“不斷讀取文件內(nèi)容直到到達(dá)文件末尾!”

bool fail(); //噢,這也是老朋友……檢測(cè)一個(gè)打開操作是否成功

bool good();

 

假如badbit標(biāo)志被標(biāo)設(shè)(譯注:原文為“If the badbit flag is up”,這里將“is up”譯為“標(biāo)設(shè)”,意即出現(xiàn)了badbit對(duì)應(yīng)的錯(cuò)誤,badbit狀態(tài)被置為當(dāng)前的錯(cuò)誤狀態(tài),下同),則bad()函數(shù)返回true;假如failbit標(biāo)志被標(biāo)設(shè),則fail()函數(shù)返回true;假如沒有錯(cuò)誤發(fā)生(goodbit標(biāo)志被標(biāo)設(shè)),則good()函數(shù)返回true;假如操作已經(jīng)到達(dá)了文件末尾(eofbit被標(biāo)設(shè)),則eof()函數(shù)返回true.

如果錯(cuò)誤發(fā)生,你必須清除這些錯(cuò)誤狀態(tài),以使你的程序能正確適當(dāng)?shù)乩^續(xù)運(yùn)行——如果你這么打算的話。要清除錯(cuò)誤狀態(tài),需使用clear()函數(shù)。此函數(shù)帶一個(gè)參數(shù),它是你將要設(shè)為當(dāng)前狀態(tài)的標(biāo)志值。假使你想讓你的程序“清清爽爽”地運(yùn)行下去,只要將ios::goodbit作為實(shí)參。你將在以下內(nèi)容中看到示例代碼。

我將向你展示示例代碼,以鞏固你所學(xué)到的理論知識(shí)。

 

示例1:簡(jiǎn)單的狀態(tài)檢測(cè)

 

// 實(shí)際應(yīng)用中可將 FileStream替換成你相應(yīng)在使用的文件流句柄

    if(FileStream.rdstate() == ios::eofbit)

       cout << "End of file!\n";

    if(FileStream.rdstate() == ios::badbit)

       cout << "Fatal I/O error!\n";

    if(FileStream.rdstate() == ios::failbit)

       cout << "Non-fatal I/O error!\n";

    if(FileStream.rdstate() == ios::goodbit)

cout << "No errors!\n";

 

示例2clear()函數(shù)

 

#include <fstream.h>

 

void main()

{

    ofstream File1("file2.txt"); //建立file2.txt

    File1.close();

 

    // 下面的檢測(cè)代碼將會(huì)返回錯(cuò)誤,這是因?yàn)槲沂褂昧?/span>ios::noreplace打開模式

    // 它模式在試圖打開一個(gè)已存在的文件時(shí)會(huì)返回錯(cuò)誤

    ofstream Test("file2.txt",ios::noreplace);

 

    // 上一行將導(dǎo)致ios::failbit錯(cuò)誤,我們這就將其演示出來

    if(Test.rdstate() == ios::failbit)

       cout << "Error...!\n";

 

    Test.clear(ios::goodbit); // 將當(dāng)前狀態(tài)重置為ios::goodbit

 

    if(Test.rdstate() == ios::goodbit) // 檢測(cè)程序是否已經(jīng)正確地施行了設(shè)置

       cout << "Fine!\n";

 

    Test.clear(ios::eofbit); // 將狀態(tài)標(biāo)志設(shè)為ios::eofbit. 無實(shí)際用途.

 

    if(Test.rdstate() == ios::eofbit) // 檢測(cè)是否已經(jīng)正確地施行了設(shè)置       cout << "EOF!\n";

 

    Test.close();

   

}

 

除了使用標(biāo)記值判斷,你也可以使用函數(shù)(譯注:指bad()、eof()、fail()、good()這些函數(shù))的形式進(jìn)行判斷,兩者實(shí)際上是一樣的——都是檢測(cè)某個(gè)標(biāo)記是否被標(biāo)設(shè)。這些函數(shù)前面已經(jīng)介紹過,我就不再重復(fù)了。如果你對(duì)如何使用它們還不是十分確定,那就重新回顧一下本教程中我曾經(jīng)為你演示的應(yīng)該如何檢測(cè)一個(gè)文件打開操作是否成功的那部分內(nèi)容。在那里我就使用了fail()函數(shù)。



本文引用通告地址: http://blog.csdn.net/Kusk/services/trackbacks/7381.aspx
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
io庫(kù)中的setstate和clear區(qū)別
C++輸入方法總結(jié)
《C++ Primer》筆記 第8章 IO庫(kù)
C語言的有關(guān)概念
C++輸入輸出文件流
C ++文件流操作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服