寫這篇文章初衷爲在使用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是默認必帶的,可加上也可不加,對程序無影響)