2012-08-06 22 views
0

我正在使用gzstream來寫我的C++程序的輸出。但是,有時生成的文件似乎寫得很糟糕:zcat: output.txt.gz: unexpected end of file,即使我自己的程序沒有返回錯誤。在C++中,如何在使用gzstream編寫壓縮文件時檢查錯誤?

因此,我想在寫入文件時發現錯誤,這不需要等到程序完成後才能執行zcat並查看上述錯誤。

這裏是我的代碼的相關部分:

ogzstream outStream; 
outStream.open ("output.txt.gz"); 
if (! outStream.is_open()) { cerr << "error while opening" << endl; exit (1); } 
for (size_t i = 0; i < vecResults.size(); ++i) 
    outStream << i << " " << vecResults[i] << endl; 
outStream.close(); 

有什麼方法可以改善呢?在使用<<寫作之後,我應該檢查任何錯誤位嗎?或關閉後?如果是的話,我該怎麼做?

(FYI這是相當難以複製的錯誤,因爲它發生很少,但常常足以令人反感。)

+0

你打開它在二進制模式? – Dani 2012-08-06 18:33:41

+0

@Dani我打開它,如上面所寫,這是默認的'int open_mode = std :: ios :: in' – tflutre 2012-08-06 18:45:05

+0

當然它會失敗。以二進制模式打開它。 – Dani 2012-08-06 19:45:04

回答

1

您應該能夠關閉後它來檢查的outStream.good()結果,假設錯誤檢查在內部正確實施。

或者,您可以使用exceptions(...)成員來請求在發生錯誤時拋出異常。

編輯:錯誤位不會自動重置,因此最後檢查它們是安全的;如果有任何失敗,你可以在最後檢查。

+0

謝謝,但最後我決定直接使用Zlib而不是gzstream(它簡單地包裝它),並且我正在檢查由gzprintf和gzclose返回的值 – tflutre 2012-08-08 18:59:06

相關問題