Linux 有
fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, ...)
可以在文件中打孔,即释放给定的块并使文件成为“稀疏文件”。
但是如何使用 Win32 API 做到这一点呢?有人有 Win32 的示例吗,Win32 相当于 Linux
fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, 1048576, 2097152);
?
DWORD dwBytesReturned;
FILE_ZERO_DATA_INFORMATION FZDI;
FZDI.FileOffset.QuadPart = 1048576;
FZDI.BeyondFinalZero.QuadPart = 1048576 + 2097152;
int res = DeviceIoControl(hFile, FSCTL_SET_ZERO_DATA, &FZDI, sizeof(FZDI), NULL, 0, &dwBytesReturned, NULL);