我知道我可以用操作符檢查成功的文件打開!和std :: fstream類的成員函數fail()。std :: ftsream的成員函數bad()用於檢查
但我可以用於這個目的也成員函數壞()?它是否符合標準?
我知道我可以用操作符檢查成功的文件打開!和std :: fstream類的成員函數fail()。std :: ftsream的成員函數bad()用於檢查
但我可以用於這個目的也成員函數壞()?它是否符合標準?
當然可以,ios::bad()
返回boolean
和!
將簡單地否定boolean
(即true
- >false
,反之亦然)。
不管您是否想要打算要做的是一個不同的問題。 bad()
檢查流的完整性丟失,而不是打開失敗。
我想檢查只有成功的文件開放 – FrozenHeart
@NikitaTrophimov然後直接回答你的問題,沒有。你不能使用':: bad()'來達到這個目的。這不符合標準。 –
ios::operator!
和ios::bad
不可互換。 operator!
檢查是否有錯誤(與ios::fail
相同),而ios::bad
僅檢查不可恢復的錯誤。
您需要檢查什麼取決於您的用例,您需要了解其含義。
我想檢查只有成功的文件開放 – FrozenHeart
@NikitaTrophimov然後檢查是否是'好'。 – pmr
函數bad()
對於「不可恢復的錯誤」產生true
- 無論如何。基本上,bad()
被設置,每當有什麼因爲某種形式的格式錯誤的原因失敗的原因。有趣的是,當文件緩衝區的open()
失敗時,各種文件流類(std::ofstream
,std::ifstream
和std::fstream
)的open()
函數全部設置爲std::ios_base::failbit
!也就是說,您不能使用stream.bad()
來測試open()
是否失敗。您可以使用stream.fail()
。就個人而言,我不會打擾和使用轉換爲bool
:
std::ofstream out("file");
if (out) {
process();
}
else {
report_error();
}
所以我只能使用operator!,fail()和good()來達到這個目的,對吧? – FrozenHeart
您可以使用隱式轉換到'bool','operator!()'和'fail()'來確定'open()'是否失敗。如果文件恰好是空的,可以在文件成功的open()之後立即設置'eof()',我認爲(我不確定,但是跟蹤它的任務它下降)。如果設置了任何錯誤位,包括'std :: ios_base :: eofbit','good()'是'false'。無論如何,其他三種方法都是足夠的,我看到'good()'比'eof()'更少的合理使用。 –
爲什麼不'好()'? –