8

std::ios_base::truncでフラグを使用する目的は何std::ios_base::outですか? これは多くの例で見ました。

ファイルを切り捨てることも標準によって保証されていると思いましたstd::ios_base::out(そして、私が知っているすべてのSTL実装はこれを行います)。ファイルを切り捨てたいことを明示的に通知する必要がありますか?

4

3 に答える 3

7

はい、instd::ios_base::outと同等です。"w"fopen

ポイントstd::ios_base::truncは、std::ios_base::instd::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"
于 2013-08-04T07:50:57.633 に答える
5

ファイルを拡張するのではなく、ファイルの内容を置き換えるには、ファイルを開く必要があります

std::ios_base::out | std::ios_base::trunc

出力ファイル ストリームの場合、オープン モード out は と同じです。out|truncつまり、truncflag は省略できます。

ただし、双方向ファイル ストリームの場合は、trunc常に明示的に指定する必要があります。

出力ファイルを拡張するには、フラグstd::ios_base::ate | std::ios_base::appを使用します。

truncここでは、フラグが設定されておらず、ファイルの初期位置がファイルの最後にあるため、ファイルの内容は保持されます。

ただし、追加 truncのフラグを設定することができ、ファイルの内容は破棄され、出力は空のファイルの最後に行われます。

于 2013-08-04T08:00:00.433 に答える
1

冗長です。つまり、持っていてもいなくても違いはありません。

std::ios_base::out | std::ios_base::in明らかに、冗長ではないなど、いくつかの組み合わせでは。

于 2013-08-04T07:46:24.027 に答える