提供複製文件的「標準」方法,例如通過C++。現在使用rdbuf()和運算符在C++中複製流時出錯<<
ifstream ins;
ofstream out s;
// I've omitted the opening of those stream, since it is not important for the following question.
s << ins.rdbuf();
,問題是,上面的線可能會失敗,並且在某些情況下,尤其是我要談的,是沒有辦法,我發現就知道出事了。
例如,假設輸入流實際上是一個坐在遠程NAS機器上的大文件。 現在,可能會有連接錯誤導致文件句柄無效。 試圖模擬這個,我使用了一個大文件,在調試器中,我停在這一行,找到句柄,然後繼續調試器,然後強制關閉文件句柄(通過sysinternals套件的進程管理器)。
結果是:行結束,文件未被正確複製,有時完全不復制,有時只有部分文件被關閉。 與運營商< <和rdbuf()的文檔相矛盾,沒有設置錯誤/失敗狀態,也沒有拋出異常。
我只能注意到,當試圖關閉輸入流時,會引發異常。
有沒有人有這樣的現象?! 無論如何檢查/測試這是否正確完成?
Regards,
「_treat錯誤輸入完全像file_結束」是cfront iostream傳統? – curiousguy
@curiousguy我懷疑它比那更進一步。對於我見過的大多數使用FILE *的程序來說,這或多或少都是標準做法。 (這是爲了輸入,對於輸出,仔細的程序會在關閉之後檢查是否沒有錯誤發生。) –
在舊的時代,甚至還有一種方式讓流緩衝區指示讀取失敗,而不是EOF? – curiousguy