ファイルの長さを指定して切り詰めたり伸長する方法。

§1 _chsizeを用いる場合

#include <stdio.h>
#include <io.h>

FILE* fp = fopen( "test.bin", "wb" );

int fd = _fileno( fp );

_chsize( fd, len ); // lenは設定したい長さ

fclose( fp );

_chsizeはFILE*ではなくファイルディスクリプタ(int)を引数に取るため、_filenoでFILE*からintに変換する必要がある(fp->_fileを参照するやり方もあるが、_filenoを使うのが無難)。

§2 SetEndOfFileを用いる場合

HANDLE hFile = CreateFile( "test.bin", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

SetFilePointer( hFile, len, NULL, FILE_BEGIN ); // lenは設定したい長さ

SetEndOfFile( hFile );

CloseHandle( hFile );

SetFilePointerでファイルポインタを移動してから、SetEndOfFileでEOFを設定することでファイルの長さを設定することが出来る。

§3 FileStream.SetLengthを用いる場合

FileStream stream = new FileStream(@"test.bin", FileMode.Open);

stream.SetLength(len); // lenは設定したい長さ

stream.Close();