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 (0) 範圍的所有零配置磁片儲存體,這相當於使用 WriteFile 函式將零寫入檔案 (0) 。
遠端檔案的時間戳記可能無法正確更新。 若要確保結果一致,請使用未緩衝的 I/O。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此程式碼。
技術 | 支援 |
---|---|
伺服器訊息區 (SMB) 3.0 通訊協定 | Yes |
SMB 3.0 透明容錯移轉 (TFO) | 是 |
具有向外延展檔案共用的 SMB 3.0 (SO) | 是 |
叢集共用磁片區檔案系統 (CsvFS) | Yes |
彈性檔案系統 (ReFS) | Yes |
規格需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
標頭 | winioctl.h (包含 Windows.h) |