fstream を使用して、既存のファイルを部分的に切り捨て (または短縮) しようとしています。私は EOF 文字を書いてみましたが、これは何もしないようです。
どんな助けでも大歓迎です...
私はあなたができるとは思わない。HANDLE<->int<->FILE *
少なくともWindowsでは、のラッパー階層を「上下に」移動するための多くの関数がありますがFILE *
、iostreamsオブジェクトからを抽出するための「適切な」機能はありません(実際に実装されている場合でも)。
この質問が参考になるかもしれません。
個人的には、iostreamを避けて操作することを強くお勧めします。これらは、設計が不十分で、C ++が多く、見るのが面倒です。Boostのiostreamを確認するか、クラスを使用する必要がある場合はstdio.hをラップします。
stdioに関連する関数はftruncate()です。
Boost.Interprocessライブラリは、移植可能な関数を定義しますtruncate
。何らかの理由で文書化されていませんが、このヘッダー ファイルで見つけることができます。
最後に弾丸を噛み、配列に保持するファイルの部分を読み取って、それを書き直しました。これは最善の解決策ではありませんが、ファイルは常に小さいため、この方法を受け入れることにしました。
OS次第でしょう。ほとんどの OS はこれをサポートしていますが、方法が異なります。Windows では、SetEndOfFile()
. Unix および同様のシステムではlseek
、ファイルを終了させたい場所に移動し、そこでlwrite
0 バイトを実行します。他の OS は間違いなく他の方法を使用します。