C++ fstream 在文件末尾寫入問題

寫這篇文章初衷爲在使用ofstream時,想在文件末尾追加,但是設置seekp(0,ios::end),每次仍然會覆蓋掉之前內容。

ofstream流,

  • 以ios::app打開(或者“ios::app|ios::out”),如果沒有文件,那麼生成空文件;如果有文件,那麼在文件尾追加。
  • 以ios::app|ios::in打開,不管有沒有文件,都是失敗。
  • 以ios::ate打開(或者”ios::ate|ios::out”),如果沒有文件,那麼生成空文件;如果有文件,那麼清空該文件
  • 以ios::ate|ios::in打開,如果沒有文件,那麼打開失敗;如果有文件,那麼定位到文件尾,並可以寫文件,但是不能讀文件

ifstream流:

  • 以ios::app打開(“ios::app|ios::out”),不管有沒有文件,打開都是失敗。
  • 以ios::ate打開(“ios::ate|ios::out”),如果沒有文件,打開失敗
  • 如果有文件,打開成功,並定位到文件尾,但是不能寫文件

fstream流,默認是ios::in,所以如果沒有文件,ios::app和ios::ate都是失敗,

  • 以ios::app|ios::out,如果沒有文件則創建文件,如果有文件,則在文件尾追加
  • 以ios::ate|ios::out打開,如果沒有文件則創建文件,如果有,則清空文件。
  • 以ios::ate|ios::out|ios::in打開,如果沒有文件,則打開失敗,有文件則定位到文件尾 

可見:ios::app不能用來打開輸入流,即不能和ios::in相配合
而ios::ate可以和ios::in配合,此時定位到文件尾;如果沒有ios::in相配合而只是同ios::out配合,那麼將清空原文件
(ios::ate|ios::in–>在原文件尾追加內容;ios::ate—>清空原文件,ios::out是默認必帶的,可加上也可不加,對程序無影響) 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章