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 ギガバイトのファイルでサポートされています。
Windows 8とWindows Server 2012では、このコードは次のテクノロジでサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | いいえ |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | いいえ |
クラスターの共有ボリューム ファイル システム (CsvFS) | コメントを表示する |
Resilient File System (ReFS) | いいえ |
CsvFs では、ディレクトリの圧縮はサポートされていません。 CsvF では、ファイルがノードによって排他的に開かれた場合にのみ、ファイルを圧縮できます。 SMB 3.0 Transparent Failover and Scale-Out では、NTFS 圧縮ファイルはサポートされていません。 FSCTL 呼び出しはブロックされませんが、サポートされていません。
Transacted Operations
CreateFileTransacted で開かれたファイルの圧縮状態を変更することはできません。トランザクションの詳細については、「 トランザクション NTFS」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | winioctl.h (Windows.h を含む) |