2012-10-03 15 views

回答

-1

當然可以,ios::bad()返回boolean!將簡單地否定boolean(即true - >false,反之亦然)。

不管您是否想要打算要做的是一個不同的問題。 bad()檢查流的完整性丟失,而不是打開失敗。

+0

我想檢查只有成功的文件開放 – FrozenHeart

+0

@NikitaTrophimov然後直接回答你的問題,沒有。你不能使用':: bad()'來達到這個目的。這不符合標準。 –

2

ios::operator!ios::bad不可互換。 operator!檢查是否有錯誤(與ios::fail相同),而ios::bad僅檢查不可恢復的錯誤。

查看他們各自的文檔herehere

您需要檢查什麼取決於您的用例,您需要了解其含義。

+0

我想檢查只有成功的文件開放 – FrozenHeart

+0

@NikitaTrophimov然後檢查是否是'好'。 – pmr

1

函數bad()對於「不可恢復的錯誤」產生true - 無論如何。基本上,bad()被設置,每當有什麼因爲某種形式的格式錯誤的原因失敗的原因。有趣的是,當文件緩衝區的open()失敗時,各種文件流類(std::ofstream,std::ifstreamstd::fstream)的open()函數全部設置爲std::ios_base::failbit!也就是說,您不能使用stream.bad()來測試open()是否失敗。您可以使用stream.fail()。就個人而言,我不會打擾和使用轉換爲bool

std::ofstream out("file"); 
if (out) { 
    process(); 
} 
else { 
    report_error(); 
} 
+0

所以我只能使用operator!,fail()和good()來達到這個目的,對吧? – FrozenHeart

+0

您可以使用隱式轉換到'bool','operator!()'和'fail()'來確定'open()'是否失敗。如果文件恰好是空的,可以在文件成功的open()之後立即設置'eof()',我認爲(我不確定,但是跟蹤它的任務它下降)。如果設置了任何錯誤位,包括'std :: ios_base :: eofbit','good()'是'false'。無論如何,其他三種方法都是足夠的,我看到'good()'比'eof()'更少的合理使用。 –