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

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

交易作業

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

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

規格需求

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

另請參閱