[英]Why does tellp() return 0 for ios::app but not for ios::ate?
我有以下代碼片段:
ofile.open("New1.dat",ios::app|ios::binary|ios::ate);
long bytes = ofile.tellp()/sizeof(t);
cout<<ofile.tellp()<<endl; //line 1
t.input(bytes);
ofile.write((char *)&t,sizeof(t));
ofile.close();
當我刪除ios::app
或ios::ate
,第line 1
的輸出為0,但只有當它們兩者在一起時,它們才會給出正確的文件位置。 為什么會這樣? PS我知道ios :: app和ios :: ate之間的區別。
提前致謝!
來自std :: ios :: openmode (C ++ 11的第27.5.3.1.4節)
std::ios::app
意味着在每次寫入之前尋找到流的末尾。 因此, 在任何寫操作之前,流可能不會結束。 無論指針在哪里( 0
或其他地方),寫入總是在結束時完成。 (在每次寫操作之前隱式尋求結束)
另一方面, std::ios::ate
意味着在打開后立即尋找到流的末尾,因此保證返回文件的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.