ios::app与ios::ate打开方式有什么不同??
看一個資料上說: ?
1.ios::app ???----寫入的數據將被追加在文件的末尾,此方式使用ios::out ?
2.ios::ate ???----寫入的數據將被追加在文件的末尾,此方式不使用ios::out ?
但是我看不懂最后一句,什么叫使用和不使用“ios::out”呢?? ?
ios::out本身不是就是打開一個可寫文件嗎? ?
既然都能追加寫入了,還能不讓寫? ?
謝謝。
answer1:
1.ios::app ???----寫入的數據將被追加在文件的末尾,此方式使用ios::out ?
2.ios::ate ???----寫入的數據將被追加在文件的末尾,此方式不使用ios::out ?
ios::app ?多個線程或者進程對一個文件寫的時候,假如文件原來的內容是abc,第一個線程(進程)往里面寫了個d,第二個線程(進程)寫了個e的話,結果是 abcde ?
ios:ate的話,后面寫的回覆蓋前面一個寫的,還是上面那個例子的話(第二個后寫)結果為abce
answer2:
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配合,那么將清空原文件 ?
可以在《C++ ?輸入輸出流及本地化》1.4.2中找到更詳細的描述:(大意)以ios::app方式打開文件,即使修改文件指針,也只能輸出到文件尾。實際上以 ios::app打開的文件的
總結
以上是生活随笔為你收集整理的ios::app与ios::ate打开方式有什么不同??的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 图像二进制保存-Blocb、
- 下一篇: ios::ate ios::app io