Win32API ファイルサイズを切り詰める SetFilePointer SetEndOfFile
ファイルサイズを切り詰める
ちょうどLinuxでのtruncateシステムコールと同じような機能をWin32APIで実現する。使用するAPI
#include <windows.h> //ファイルサイズを切り詰める int main() { HANDLE hFile; int i; BOOL bRet; DWORD dwFileSize; DWORD dwNumberOfReadBytes; char *lpFileName = "test.txt"; //ファイルを開く hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { return 1; } //int型整数(4バイト)を10個(40バイト分)ファイルに書き込む for (i = 0; i < 10; i++) { bRet = WriteFile( hFile, &i, sizeof(i), &dwNumberOfReadBytes, NULL); if (!bRet) { goto Exit; } } //ファイルサイズ表示 dwFileSize = GetFileSize(hFile, NULL); printf("FileSize before SetEndOfFile = %u\n", dwFileSize); //ファイルの先頭から20バイト目にシークする SetFilePointer(hFile, sizeof(int)*5, NULL, FILE_BEGIN); //現在のファイルポインタにEOFをセットして //ファイルサイズを切り詰める SetEndOfFile(hFile); //ファイルサイズを表示 dwFileSize = GetFileSize(hFile, NULL); printf("FileSize before SetEndOfFile = %u\n", dwFileSize); Exit: //ファイルを閉じる CloseHandle(hFile); return 0; }