Cでファイルを切り捨てるには?

ファイルの以前の内容をある程度の長さ (他の回答が提供するゼロより大きい長さ) まで保持する場合、POSIX は truncate() を提供します。 そして ftruncate()

#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);

名前は、ファイルの短縮という主な目的を示しています。ただし、指定された長さが以前の長さよりも長い場合、ファイルは新しいサイズに拡張されます (ゼロ パディング)。 ftruncate() に注意してください FILE * ではなく、ファイル記述子で動作します;以下を使用できます:

if (ftruncate(fileno(fp), new_length) != 0) ...error handling...

ただし、ファイル ストリーム (FILE *) が混在していることに注意する必要があります。 ) およびファイル記述子 (int ) 単一のファイルへのアクセスは混乱を招く傾向があります — いくつかの問題についてはコメントを参照してください。これは最後の手段です。

ただし、あなたの目的のためには、開いたときに切り捨てるだけで十分である可能性が高く、そのためには、他の人が提供するオプションで十分です.

Windows の場合、関数 SetEndOfFile() があります。 および関連する関数 SetFileValidData() 同様の機能を実行できますが、異なるインターフェイスを使用します。基本的に、ファイルの終わりを設定したい場所をシークしてから、関数を呼び出します。

関数 _chsize() もあります sofrによる回答に記載されているとおり。


Windows システムでは、ヘッダー <unistd.h> はありません。 ただし、

を使用してファイルを切り詰めることができます
 _chsize( fileno(f), size);

これは、オペレーティング システムの機能です。これを行う標準的な POSIX の方法は次のとおりです。

open("file", O_TRUNC | O_WRONLY);