2011-06-06 32 views

回答

2

檢查狀態標誌:

eofbit 
failbit 
badbit 

或檢查它是否拋出ios_base::failure異常

+0

當eofbit被設置時,'gcount()'也可以作爲必要的信息來理解'read()'實現了什麼 – 2011-06-06 07:21:04

2

不知道你的「完美讀」的意思,但如果 流無法failbit將被設置閱讀請求的字符數量;在 換句話說,如果你要求20個字節,並且只有19個可用,則認爲 讀取失敗。

測試失敗的通常的方法是簡單地通過處理流作爲 一個布爾值,例如:

if (input) // succeeded 

if (! input) // failed 

(這也需要badbit考慮,這將是設置是否存在 是實際讀取時的I/O問題。)

在的情況下,如果發生故障,您可能還想檢查 istream::gcount; istream::gcount返回 最後一個未格式化讀取的字符數,即使在 失敗的情況下也是如此。因此,讀取原始數據時,它不是不尋常的使用 類似:

while (input.read(...) || input.gcount() != 0) { 
    // process input.gcount() characters... 
} 

這是通常的成語,這隻要 輸入失敗停止略有不同。

相關問題