C++中的檔案輸入/輸出(4):檢測輸入/輸出的狀態標誌 (轉)
C++中的輸入/輸出(4):namespace prefix = o ns = "urn:schemas--com::office" />
原作:Ilia Yordanov, to:loobian@cpp-home.com">loobian@cpp-home.com
檢測輸入/輸出的狀態標誌
在此我不打算解釋“標誌(flags)”一詞的含義,不過假如你真的完全不理解關於這方面的概念,那麼將本章讀過一遍之後也許你對此會得到一些認識,我也相信你同樣能理解這部分的理論。儘管如此,如果你還是不明白標誌在C++中的含義,我推薦你閱讀一些關於這個主題的資料。
好,讓我們開始吧。
C++中負責的輸入/輸出的包括了關於每一個輸入/輸出操作的結果的記錄資訊。這些當前的狀態資訊被包含在io_state型別的中。io_state是一個列舉型別(就像open_mode一樣),以下便是它包含的值(譯註:表中第一列為列舉值的名稱,第二列為該值相應含義的描述):
goit
無錯誤
Eofbit
已到達檔案尾
failbit
非致命的輸入/輸出錯誤
badbit
致使的輸入/輸出錯誤
有兩種方法可以獲得輸入/輸出的狀態資訊。一種方法是透過rdstate(),它將返回當前狀態的錯誤標記(上表中提到的)。例如,假如沒有任何錯誤,則rdstate()會返回goodbit.
另一種方法則是使用下面任何一個函式來檢測相應的輸入/輸出狀態:
bool bad();
bool eof(); //還記得它麼?“不斷讀取檔案內容直到到達檔案末尾!”
bool fail(); //噢,這也是老朋友……檢測一個開啟操作是否成功
bool good();
假如badbit標誌被標設(譯註:原文為“If the badbit flag is up”,這裡將“is up”譯為“標設”,意即出現了badbit對應的錯誤,badbit狀態被置為當前的錯誤狀態,下同),則bad()函式返回true;假如failbit標誌被標設,則fail()函式返回true;假如沒有錯誤發生(goodbit標誌被標設),則good()函式返回true;假如操作已經到達了檔案末尾(eofbit被標設),則eof()函式返回true.
如果錯誤發生,你必須清除這些錯誤狀態,以使你的能正確適當地繼續執行——如果你這麼打算的話。要清除錯誤狀態,需使用clear()函式。此函式帶一個引數,它是你將要設為當前狀態的標誌值。假使你想讓你的程式“清清爽爽”地執行下去,只要將ios::goodbit作為實參。你將在以下內容中看到示例程式碼。
我將向你展示示例程式碼,以鞏固你所學到的理論知識。
示例1:簡單的狀態檢測
// 實際應用中可將 FileStream替換成你相應在使用的檔案流控制程式碼
if(FileStream.rdstate() == ios::eofbit)
cout << "End of file!n";
if(FileStream.rdstate() == ios::badbit)
cout << "al 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";
示例2:clear()函式
#include
void main()
{
ofstream File1("file2.txt"); //建立file2.txt
File1.close();
// 下面的檢測程式碼將會返回錯誤,這是因為我使用了ios::noreplace開啟
// 它模式在試圖開啟一個已存在的檔案時會返回錯誤
ofstream Test("file2.txt",ios::noreplace);
// 上一行將導致ios::failbit錯誤,我們這就將其演示出來
if(Test.rdstate() == ios::failbit)
cout << "Error...!n";
Test.clear(ios::goodbit); // 將當前狀態重置為ios::goodbit
if(Test.rdstate() == ios::goodbit) // 檢測程式是否已經正確地施行了設定
cout << "Fine!n";
Test.clear(ios::eofbit); // 將狀態標誌設為ios::eofbit. 無實際用途.
if(Test.rdstate() == ios::eofbit) // 檢測是否已經正確地施行了設定 cout << "EOF!n";
Test.close();
}
除了使用標記值判斷,你也可以使用函式(譯註:指bad()、eof()、fail()、good()這些函式)的形式進行判斷,兩者實際上是一樣的——都是檢測某個標記是否被標設。這些函式前面已經介紹過,我就不再重複了。如果你對如何使用它們還不是十分確定,那就重新回顧一下本教程中我曾經為你演示的應該如何檢測一個檔案開啟操作是否成功的那部分內容。在那裡我就使用了fail()函式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-997107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- 【C++】標準檔案的輸入輸出!!!C++
- C++中的檔案輸入/輸出(2):讀取檔案 (轉)C++
- 排序,檔案輸入輸出排序
- 檔案操作-輸入輸出
- 【C++】輸入輸出C++
- C++中的檔案輸入/輸出(1):你的第一個程式 (轉)C++
- C輸入輸出與檔案
- python:檔案的輸入與輸出Python
- C++中的檔案輸入/輸出(5):二進位制檔案的處理 (轉)C++
- c++入門:輸入輸出流C++
- Java —— 標準輸入輸出Java
- java_檔案輸入與輸出Java
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- 第10章 對檔案的輸入輸出
- 輸入輸出
- C++ 中輸入輸出流及檔案流操作筆記C++筆記
- python 標準輸入輸出Python
- 接管子程式的標準輸入輸出
- Java中的輸入輸出總結Java
- 瞭解下C# 檔案的輸入與輸出C#
- converter設計模式擴充套件,多種輸入輸出與標準輸入輸出的轉化方案設計模式套件
- 輸入輸出流
- [C++]輸入/輸出流類庫C++
- C++格式化輸入輸出C++
- 資料的輸入輸出
- Python的輸入輸出Python
- C++名稱空間、標準輸入輸出、引用C++
- 重學java中的輸入輸出流Java
- Python進階02 文字檔案的輸入輸出Python
- Linux 下的檔案管理&管理系統中的輸出輸入Linux
- Java 輸入輸出流Java
- 輸入輸出系統
- JAVA輸入輸出流Java
- 重定向子程式標準輸入輸出
- 檔案輸入輸出處理(二)-位元組流
- 詳解Java中的IO輸入輸出流!Java
- java中基本輸入輸出流的解釋Java