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