ifstrem流不能使用ios::app標示

來源:互聯網
上載者:User

項目基本結束啦,上周五我們帶著原始碼去客戶公司部署。

同一份代碼,換了箇舊版本的GCC編譯器,編譯時間就有種不好的預感,果然編譯出來的程式的執行結果就死活不對。

Linux下Debug了半天,終於將問題縮小到了下面一行代碼上:

fs.open(filePath, ios::binary | ios::app);

這個fs是由函數的模板參數傳遞下來的,即可能是輸入資料流,也可能是輸出資料流,該部分代碼主要功能是校正需要開啟的檔案是否合法並將傳入的檔案流給open了。

在傳入的fs是輸入資料流時,fs的open函數執行會失敗,即無法開啟指定檔案。

對於輸入資料流而言,只是讀取流中的內容,不存在對其追加的需求,所以我試著把ios::app標記移除,果然可以正常開啟輸入資料流了。

想想還是讓一個函數承載了混亂職責,才出現了輸入資料流也以app模式開啟這種奇怪代碼,最終我們決定將校正檔案是否合法這一功能單獨提取一個函數,而檔案流的開啟由調用方自己去維護。

 

總結:老版本的GCC編譯器對於輸入資料流ifstream的開啟標記做了嚴格的限制,如果以app模式開啟一個輸入資料流是會失敗的。

最新版的GCC編譯器更加仁慈一點,對於輸入資料流以app模式開啟,不會導致流開啟失敗,只不過這個app模式對於輸入資料流無效罷了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.