寫這篇文章初衷為在使用ofstream時,想在文件末尾追加,但是設置seekp(0,ios::end),每次仍然會覆蓋掉之前內(nèi)容。
1- ofstream流
- 以ios::app打開(或者“ios::app|ios::out”),如果沒有文件,那么生成空文件;如果有文件,那么在文件尾追加。
- 以ios::app|ios::in打開,不管有沒有文件,都是失敗。
- 以ios::ate打開(或者”ios::ate|ios::out”),如果沒有文件,那么生成空文件;如果有文件,那么清空該文件
- 以ios::ate|ios::in打開,如果沒有文件,那么打開失?。蝗绻形募?,那么定位到文件尾,并可以寫文件,但是不能讀文件
2- ifstream流
- 以ios::app打開(“ios::app|ios::out”),不管有沒有文件,打開都是失敗。
- 以ios::ate打開(“ios::ate|ios::out”),如果沒有文件,打開失敗
如果有文件,打開成功,并定位到文件尾,但是不能寫文件
3- fstream流
默認是ios::in,所以如果沒有文件,ios::app和ios::ate都是失敗,
以ios::app|ios::out,如果沒有文件則創(chuàng)建文件,如果有文件,則在文件尾追加
以ios::ate|ios::out打開,如果沒有文件則創(chuàng)建文件,如果有,則清空文件。
以ios::ate|ios::out|ios::in打開,如果沒有文件,則打開失敗,有文件則定位到文件尾
可見:ios::app不能用來打開輸入流,即不能和ios::in相配合
而ios::ate可以和ios::in配合,此時定位到文件尾;如果沒有ios::in相配合而只是同ios::out配合,那么將清空原文件
(ios::ate|ios::in–>在原文件尾追加內(nèi)容;ios::ate—>清空原文件,ios::out是默認必帶的,可加上也可不加,對程序無影響)