2017年5月28日 星期日

C++ ios::app 與 ios::ate 打開方式有什麼不同

C++ ios::app 與 ios::ate 打開方式有什麼不同

用一句話形容:
兩個都把檔案指針移動到結尾,差別在於能否有權限修改、讀取原本的檔案
  • 檔案指針就像開啟記事本或聊天室窗打字時的 | 的意思。
假設有一個記事本 f.txt 內容是
ABCED

ios::ate

at end 開啟檔案並將檔案指針移動到結尾,稍後你還可以移動指針到前方修改或讀取。
fstream f("f.txt", ios::in|ios::out|ios::ate);
cout << f.tellg() << endl;
獲得目前指針位置在5
更動指針位置到起點開始算第0個位置
f.seekg(0, f.beg);

ios::app

append 原意為加上的意思,意味著沒有權限更動原本的存在物。
開啟檔案並將檔案指針移動到結尾,稍後並沒有權限可以讀取或修改前方。
fstream f("f.txt", ios::in|ios::out|ios::app);
cout << f.tellg() << endl;
回傳指針位置 0 把結尾直接當作起點了。

小提示

開檔的時候上面的 ios::in|ios::out 不可以省略,必須詳細指明要寫、要讀還是都要。
不可以像這樣寫
fstream f("f.txt", ios::app);
沒有表明到底是要怎麼樣。

沒有留言:

張貼留言