簡體   English   中英

為什么tellp()為ios :: app返回0而不為ios :: ate返回?

[英]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::appios::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意味着在打開后立即尋找到流的末尾,因此保證返回文件的大小。

進一步閱讀: C ++ Filehandling:ios:app和ios之間的區別:吃了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM