Share via


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_FILECreateFile來建立疏鬆檔案。 您必須使用 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)

另請參閱