FSCTL_SET_ZERO_DATA IOCTL (winioctl.h)
使用零 (0) 填充文件的指定范围。 如果文件稀疏或已压缩,NTFS 文件系统可能会解除分配文件中的磁盘空间。 这会在不扩展文件大小的情况下将字节范围设置为零 (0) 。
若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to a file
FSCTL_SET_ZERO_DATA, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
注解
有关重叠 I/O 对此操作的影响,请参阅 DeviceIoControl 主题的“备注”部分。
如果使用 WriteFile 函数将零 (0) 写入稀疏文件,则文件系统将为你正在写入的数据分配磁盘空间。 如果使用 FSCTL_SET_ZERO_DATA 控制代码将零 (0) 写入稀疏文件,并且零 (0) 区域足够大,则文件系统可能无法分配磁盘空间。
如果使用 FSCTL_SET_ZERO_DATA 控制代码将零 (0) 写入非稀疏文件,则会将零 (0) 写入该文件。 系统为所有零 (0) 范围分配磁盘存储,这相当于使用 WriteFile 函数将零 (0) 写入文件。
可能无法正确更新远程文件的时间戳。 若要确保结果一致,请使用非缓冲区 I/O。
在 Windows 8 和 Windows Server 2012 中,以下技术支持此代码。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | winioctl.h (包括 Windows.h) |