Share via


FSCTL_SET_COMPRESSION IOCTL (winioctl.h)

設定檔案系統支援每個檔案和個別目錄壓縮之磁碟區上檔案或目錄的壓縮狀態。 您可以使用 FSCTL_SET_COMPRESSION 壓縮或取消壓縮這類磁碟區上的檔案或目錄。

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file or directory
  FSCTL_SET_COMPRESSION,            // 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
);

備註

LZNT1 壓縮演算法是唯一實作的壓縮演算法。 因此,LZNT1 壓縮演算法會做為 DEFAULT 壓縮方法。

如果包含指定檔案或目錄的磁碟區檔系統不支援個別檔案或個別目錄壓縮,則作業會失敗。

檔案或目錄的壓縮狀態變更會與對 DeviceIoControl 的呼叫同步發生。

若要擷取檔案或目錄的壓縮狀態,請使用 FSCTL_GET_COMPRESSION 控件程序代碼。

若要擷取檔案或目錄的壓縮屬性,請使用 GetFileAttributes 函式 。 壓縮屬性會指出檔案或目錄是否經過壓縮。 壓縮狀態會指出檔案或目錄是否經過壓縮,如果是壓縮數據的格式。

此作業實際上不會壓縮目錄。 相反地,作業會設定要在目錄中壓縮之檔案的默認狀態。

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

檔案壓縮支援大小上限為 30 GB 的檔案。

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

技術 支援
伺服器消息塊 (SMB) 3.0 通訊協定 Yes
SMB 3.0 透明故障轉移 (TFO) No
具有向外延展檔案共用的SMB 3.0 (SO) No
叢集共用磁碟區文件系統 (CsvFS) 請參閱批注
彈性檔案系統 (ReFS) No

CSV 不支援壓縮目錄。 CsvF 只允許在節點獨佔開啟檔案時壓縮檔案。 SMB 3.0 透明故障轉移和 Scale-Out 不支援NTFS壓縮檔。 FSCTL 呼叫不會遭到封鎖,但不受支援。」

交易作業

您無法變更使用 CreateFileTransacted 開啟的檔案壓縮狀態。

如需交易的詳細資訊,請參閱 交易式NTFS

規格需求

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

另請參閱