Partager via


FSCTL_MOVE_FILE IOCTL (winioctl.h)

Déplace un ou plusieurs clusters virtuels d’un fichier d’un cluster logique vers un autre au sein du même volume. Cette opération est utilisée lors de la défragmentation.

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to volume
  FSCTL_MOVE_FILE,              // dwIoControlCode
  (LPVOID) lpInBuffer,          // MOVE_FILE_DATA structure
  (DWORD) nInBufferSize,        // size of input buffer
  NULL,                         // lpOutBuffer
  0,                            // nOutBufferSize
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

Remarques

Le code de contrôle FSCTL_MOVE_FILE déplace un ou plusieurs clusters virtuels d’un fichier d’un cluster logique vers un autre au sein du même volume. Si le fichier à déplacer est un fichier partiellement alloué ou compressé, la granularité du déplacement est de 16 clusters ; sinon, la granularité est un cluster.

Pour marquer un fichier ouvert afin qu’il ne soit pas défragmenté, appelez la fonction DeviceIoControl avec le code de contrôle FSCTL_MARK_HANDLE avec MARK_HANDLE_PROTECT_CLUSTERS dans le membre HandleInfo de la structure MARK_HANDLE_INFO passée dans le paramètre lpInBuffer .

Notez que la bitmap retournée par la fonction DeviceIoControl avec le code de contrôle FSCTL_GET_VOLUME_BITMAP représente un point dans le temps et peut être incorrecte dès qu’elle a été lue si le volume a une activité d’écriture. Ainsi, il est possible de tenter de déplacer un cluster vers un cluster alloué en dépit d’une image bitmap récente indiquant que le cluster n’est pas alloué. Les programmes utilisant FSCTL_MOVE_FILE doivent être préparés à cette possibilité.

Pour connaître les implications des E/S qui se chevauchent sur cette opération, consultez la section Remarques de la rubrique DeviceIoControl .

Pour obtenir la liste des fichiers, flux et types de flux pris en charge par le code de contrôle FSCTL_MOVE_FILE , consultez la section Fichiers, flux et types de flux pris en charge pour la défragmentation de la rubrique Défragmentation des fichiers .

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

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