std::ios_base::trunc
でフラグを使用する目的は何std::ios_base::out
ですか? これは多くの例で見ました。
ファイルを切り捨てることも標準によって保証されていると思いましたstd::ios_base::out
(そして、私が知っているすべてのSTL実装はこれを行います)。ファイルを切り捨てたいことを明示的に通知する必要がありますか?
std::ios_base::trunc
でフラグを使用する目的は何std::ios_base::out
ですか? これは多くの例で見ました。
ファイルを切り捨てることも標準によって保証されていると思いましたstd::ios_base::out
(そして、私が知っているすべてのSTL実装はこれを行います)。ファイルを切り捨てたいことを明示的に通知する必要がありますか?
はい、instd::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::trunc
出力ファイル ストリームの場合、オープン モード out は と同じです。out|trunc
つまり、trunc
flag は省略できます。
ただし、双方向ファイル ストリームの場合は、trunc
常に明示的に指定する必要があります。
出力ファイルを拡張するには、フラグstd::ios_base::ate | std::ios_base::app
を使用します。
trunc
ここでは、フラグが設定されておらず、ファイルの初期位置がファイルの最後にあるため、ファイルの内容は保持されます。
ただし、追加 trunc
のフラグを設定することができ、ファイルの内容は破棄され、出力は空のファイルの最後に行われます。
冗長です。つまり、持っていてもいなくても違いはありません。
std::ios_base::out | std::ios_base::in
明らかに、冗長ではないなど、いくつかの組み合わせでは。