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)
群集共享卷文件系统 (CsvFS)
弹性文件系统 (ReFS)

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winioctl.h (包括 Windows.h)

另请参阅