FSCTL_SET_SPARSE IOCTL (winioctl.h)

將指示的檔案標示為疏鬆或不疏鬆。 在疏鬆檔案中,大量的零可能不需要磁片配置。 寫入檔案時,會視需要配置非零資料的空間。

若要執行這項作業,請使用下列參數呼叫 DeviceIoControl 函 式。

BOOL DeviceIoControl(
  (HANDLE) hDevice,                         // handle to a file
  FSCTL_SET_SPARSE,                         // dwIoControlCode
  (PFILE_SET_SPARSE_BUFFER) 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的一節。

FSCTL_SET_SPARSE控制項程式碼會設定或清除指定檔案的 FILE_ATTRIBUTE_SPARSE_FILE屬性。

Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista: 清除作業僅適用于不再有任何疏鬆區域的檔案。 在具有疏鬆區域的檔案上執行清除作業可能會產生無法預期的結果。 您可以使用 FSCTL_QUERY_ALLOCATED_RANGES 控制項程式碼來判斷檔案中是否有任何疏鬆區域。

如果lpInBuffer參數為Null,則作業的行為會與FILE_SET_SPARSE_BUFFER結構的SetSparse成員為TRUE相同。 換句話說,作業會將檔案設定為疏鬆檔案。

Windows Server 2003 和 Windows XP:如果在lpInBuffer參數中傳遞FILE_SET_SPARSE_BUFFER結構,SetSparse成員的唯一有效值為TRUE,這會將檔案設定為疏鬆檔案。 在FILE_SET_SPARSE_BUFFER結構中傳遞FALSE會導致此函式呼叫失敗。 清除此屬性的唯一方式是使用 CREATE_ALWAYS 旗標) 呼叫CreateFile函式,以覆寫檔案 (。

您無法呼叫dwFlagsAndAttributes參數中具有 FILE_ATTRIBUTE_SPARSE_FILE的CreateFile來建立疏鬆檔案。 您必須使用 FSCTL_SET_SPARSE 控制項程式碼。

請注意,遠端檔案的時間戳記可能無法正確更新。 若要確保結果一致,請使用未緩衝的 I/O。

在 Windows 8 和 Windows Server 2012 中,下列技術支援此程式碼。

技術 支援
伺服器訊息區 (SMB) 3.0 通訊協定 Yes
SMB 3.0 透明容錯移轉 (TFO) Yes
具有向外延展檔案共用的 SMB 3.0 (SO) 是
叢集共用磁片區檔案系統 (CsvFS) 請參閱批註
彈性檔案系統 (ReFS) 是

CsvF 會針對疏鬆檔案執行重新導向的 IO。 CsvF 只允許當檔案由節點獨佔開啟時,才允許讓檔案疏鬆。 SMB 3.0 透明容錯移轉不支援緩衝寫入。

規格需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
標頭 winioctl.h (包含 Windows.h)

另請參閱