Awen's Blog

Sharing, Always Sharing ...
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

《轉貼》關於 ios::app 與 ios::ate 簡易說明

Posted on 2012-08-20 12:18  Awen's Blog  阅读(1877)  评论(0编辑  收藏  举报

來源: http://topic.csdn.net/t/20050103/21/3696236.html
作者: tanjie
內容:

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打開的文件的寫入,和文件指針五關。

奇怪的是:《C++輸入輸出流及當地語系化》和《C++程式設計思想》都說以ios::ate打開的檔,檔指標都會定位到檔案結尾且不清空檔,但是我發現ios::ate如果不和ios::in配合的話,將清空原文件。