FSCTL_SET_SPARSE IOCTL (winioctl.h)

Marca el archivo indicado como disperso o no disperso. En un archivo disperso, es posible que los intervalos grandes de ceros no requieran asignación de disco. El espacio de los datos distintos de cero se asignará según sea necesario cuando se escriba el archivo.

Para realizar esta operación, llame a la función DeviceIoControl con los siguientes parámetros.

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

Comentarios

Para conocer las implicaciones de la E/S superpuesta en esta operación, consulte la sección Comentarios de DeviceIoControl.

El código de control FSCTL_SET_SPARSE establece o borra el atributo FILE_ATTRIBUTE_SPARSE_FILE del archivo especificado.

Windows Server 2008 R2, Windows 7, Windows Server 2008 y Windows Vista: Una operación clara solo es válida en archivos que ya no tienen regiones dispersas. Realizar una operación clara en un archivo con regiones dispersas puede tener resultados impredecibles. Puede determinar si hay regiones dispersas en un archivo mediante el código de control FSCTL_QUERY_ALLOCATED_RANGES .

Si el parámetro lpInBuffer es NULL, la operación se comportará igual que si el miembro SetSparse de la estructura de FILE_SET_SPARSE_BUFFER fuera TRUE. En otras palabras, la operación establece el archivo en un archivo disperso.

Windows Server 2003 y Windows XP: Si se pasa una estructura FILE_SET_SPARSE_BUFFER en el parámetro lpInBuffer , el único valor válido para el miembro SetSparse es TRUE, que establece el archivo en un archivo disperso. Pasar FALSE en la estructura FILE_SET_SPARSE_BUFFER hará que se produzca un error en esta llamada de función. La única manera de borrar este atributo es sobrescribir el archivo (por ejemplo, llamando a la función CreateFile con la marca CREATE_ALWAYS ).

No se puede crear un archivo disperso llamando a CreateFile con FILE_ATTRIBUTE_SPARSE_FILE en el parámetro dwFlagsAndAttributes . Debe usar el código de control FSCTL_SET_SPARSE .

Tenga en cuenta que es posible que las marcas de tiempo no se actualicen correctamente para un archivo remoto. Para garantizar resultados coherentes, use E/S sin búfer.

En Windows 8 y Windows Server 2012, este código es compatible con las siguientes tecnologías.

Tecnología Compatible
Protocolo Bloque de mensajes del servidor (SMB) 3.0
Conmutación por error transparente (TFO) de SMB 3.0
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO)
Sistema de archivos de Volumen compartido de clúster (CsvFS) Ver comentario
Sistema de archivos resistente a errores (ReFS)

CsvFs realizará la E/S redirigida para archivos dispersos. CsvFs permite que el archivo se disperse solo cuando un nodo abre el archivo exclusivamente. La conmutación por error transparente de SMB 3.0 no admite la escritura almacenada en búfer.

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado winioctl.h (incluya Windows.h)

Consulte también