FSCTL_SET_COMPRESSION IOCTL (winioctl.h)

Définit l’état de compression actuel d’un fichier ou d’un répertoire sur un volume dont le système de fichiers prend en charge la compression par fichier et par répertoire. Vous pouvez utiliser FSCTL_SET_COMPRESSION pour compresser ou décompresser un fichier ou un répertoire sur un tel volume.

Pour effectuer cette opération, appelez la fonction DeviceIoControl avec les paramètres suivants.

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
);

Remarques

L’algorithme de compression LZNT1 est le seul algorithme de compression implémenté. Par conséquent, l’algorithme de compression LZNT1 est utilisé comme méthode de compression DEFAULT.

Si le système de fichiers du volume contenant le fichier ou le répertoire spécifié ne prend pas en charge la compression par fichier ou par répertoire, l’opération échoue.

Le changement d’état de compression du fichier ou du répertoire se produit de manière synchrone avec l’appel à DeviceIoControl.

Pour récupérer l’état de compression d’un fichier ou d’un répertoire, utilisez le code de contrôle FSCTL_GET_COMPRESSION .

Pour récupérer l’attribut de compression d’un fichier ou d’un répertoire, utilisez la fonction GetFileAttributes . L’attribut de compression indique si un fichier ou un répertoire est compressé. L’état de compression indique si un fichier ou un répertoire est compressé et, le cas échéant, le format des données compressées.

Les répertoires ne sont pas réellement compressés par cette opération. Au lieu de cela, l’opération définit l’état par défaut des fichiers créés dans le répertoire à compresser.

Notez que les horodatages peuvent ne pas être mis à jour correctement pour un fichier distant. Pour garantir des résultats cohérents, utilisez les E/S sans débogage.

La compression de fichiers est prise en charge pour les fichiers d’une taille non compressée maximale de 30 gigaoctets.

Dans Windows 8 et Windows Server 2012, ce code est pris en charge par les technologies suivantes.

Technologie Prise en charge
Protocole Server Message Block (SMB) 3.0 Oui
Basculement transparent SMB 3.0 (TFO) No
SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) No
Système de fichiers du volume partagé de cluster (CsvFS) Voir le commentaire
Système de fichiers résilient (ReFS) No

CsvFs ne prend pas en charge la compression d’un répertoire. CsvFs permet de compresser le fichier uniquement lorsque le fichier est ouvert exclusivement par un nœud. Le basculement transparent et la Scale-Out SMB 3.0 ne prennent pas en charge les fichiers compressés NTFS. L’appel FSCTL n’est pas bloqué, mais n’est pas pris en charge.

Opérations traitées

Vous ne pouvez pas modifier l’état de compression d’un fichier ouvert avec CreateFileTransacted.

Pour plus d’informations sur les transactions, consultez NTFS transactionnel.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête winioctl.h (inclure Windows.h)

Voir aussi