2012-03-15 14 views
4

ファイルの最後からXバイトを削除するクロスプラットフォームの方法を見つけようとしています。最後からファイルを切り捨てる方法は? (クロスプラットフォーム)

は、現在、私が発見した:(POSIXのための切り捨てなど)

  • プラットフォーム固有のソリューション:これは私が望んでいないものです、私はC++プログラムは、複数のプラットフォーム上で実行するため。

  • ファイル全体を読み込み、削除したいバイトを差し引いたファイルをもう一度書き出します:プログラムをできるだけ効率的かつ高速にしたいので、これを避けたいです。

「ファイルストリームの終了」メソッド/関数がある場合は、Xバイトを巻き戻して残りのファイルを切り捨てることができますか?

+0

プラットフォーム固有のメソッド用のクロスプラットフォームラッパーを記述することができます。 –

+0

duplicate eof http://stackoverflow.com/questions/873454/how-to-truncate-a-file-in-c – CapelliC

+0

"C++プログラムを複数のプラットフォームで実行したい"どのプラットフォームにしたいか教えてください走る? –

答えて

1

標準ライブラリにそのようなものはありません。彼らはストリームをサポートしていますが、ストリームには終了がありません。ファイルは現在の時点で終了します。

あなたができることは、関数にクロスプラットフォームのラッパーを書くことです。

+0

Ok ...少し違うけど関連する質問。特定のOSの場合は、windowsを指定します。 OSはファイルの終わりに達したとき、どのくらい正確に知っていますか? EOFバイトかそれに類するものはありますか?もしそうなら、他のプラットフォームでのこの実装は何ですか? (例:linux) – midnightBlue

+0

私はこれを捨てたいときに単純にそのバイトを置くことが可能かどうか疑問に思っていたので、私はこれを尋ねました。 – midnightBlue

4

クロスプラットフォーム機能の仕組みについてどう思いますか?

int truncate(int fd, long size) 
{ 
#ifdef _WIN32 || _WIN64 
    return _chsize(fd, size); 
#else 
    #ifdef POSIX 
    return ftruncate(fd, size); 
    #else 
    // code for other OSes 
    #endif 
#endif 
} 
0

Boost.Filesystemライブラリー(バージョン1.44以上)がresize_file機能を提供しています。ただ、このような独自の関数を作ります。

関連する問題