什麼是使用std::ios_base::trunc
標誌與std::ios_base::out
的目的的目的是什麼?我在很多例子中看到了這一點。什麼是使用std ::的ios_base :: TRUNC國旗的std ::的ios_base ::出來
我認爲它是由std::ios_base::out
也截斷文件的標準(和所有的STL實現我知道這樣做的)保證。我錯了,應該明確通知我想截斷文件?
什麼是使用std::ios_base::trunc
標誌與std::ios_base::out
的目的的目的是什麼?我在很多例子中看到了這一點。什麼是使用std ::的ios_base :: TRUNC國旗的std ::的ios_base ::出來
我認爲它是由std::ios_base::out
也截斷文件的標準(和所有的STL實現我知道這樣做的)保證。我錯了,應該明確通知我想截斷文件?
是的,std::ios_base::out
相當於"w"
的fopen
。
std::ios_base::trunc
這一點是當std::ios_base::in
和std::ios_base::out
在同一時間使用。
in | out
相當於"r+"
in | out | trunc
相當於"w+"
binary | in | out
等同於"rb+"
binary | in | out | trunc
等同於"wb+"
也許表會更明顯:
binary in out trunc | stdio equivalent
-----------------------+-----------------
+ + | "r+"
+ + + | "w+"
+ + + | "r+b"
+ + + + | "w+b"
這是多餘的 - 換句話說,如果你有或沒有沒有區別。
顯然,在一些組合,如std::ios_base::out | std::ios_base::in
它不會是多餘的。
要替換文件的內容,而不是擴展文件,則必須在
std::ios_base::out | std::ios_base::trunc
打開輸出文件流開模出相當於out|trunc
,就是trunc
標誌可以被省略。
但對於雙向文件流,必須始終明確指定trunc
。
要擴展輸出文件,請使用標誌std::ios_base::ate | std::ios_base::app
。
這裏,文件內容被保留,因爲trunc
標誌未設置,初始文件位置在文件末尾。
然而,另外trunc
標記可以被設置,並且該文件的內容將被丟棄,並且該輸出在一個空文件的末尾完成。
我不明白你對std :: ios_base :: binary的正確理解。你什麼意思?我應該明確指定std :: ios_base :: trunc與std :: ios_base :: binary嗎? – FrozenHeart
@FrozenHeart編輯。 'trunc'實質上是指「我想先寫」。 – timothyqiu
好的,非常感謝 – FrozenHeart