ファイルの長さを指定して切り詰めたり伸長する方法。
_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を使うのが無難)。
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を設定することでファイルの長さを設定することが出来る。
FileStream.SetLengthを用いる場合
FileStream stream = new FileStream(@"test.bin", FileMode.Open);
stream.SetLength(len); // lenは設定したい長さ
stream.Close();