Operaciones dispersas de archivos
Para determinar si un sistema de archivos admite archivos dispersos, llame a la función GetVolumeInformation y examine la marca de bits FILE_SUPPORTS_SPARSE_FILES devuelta a través del parámetro lpFileSystemFlags.
La mayoría de las aplicaciones no conocen los archivos dispersos y no crearán archivos dispersos. El hecho de que una aplicación lea un archivo disperso es transparente para la aplicación. Una aplicación que tenga en cuenta los archivos dispersos debe determinar si su conjunto de datos es adecuado para mantenerse en un archivo disperso. Después de realizar esa determinación, la aplicación debe declarar explícitamente un archivo como disperso mediante el código de control FSCTL_SET_SPARSE.
Una vez que una aplicación ha establecido un archivo en dispersión, la aplicación puede usar el código de control de FSCTL_SET_ZERO_DATA para establecer una región del archivo en cero. Además, la aplicación puede usar el código de control FSCTL_QUERY_ALLOCATED_RANGES para acelerar las búsquedas de datos distintos de cero en el archivo disperso.
Cuando se realiza una operación de escritura (con una función u operación distinta de FSCTL_SET_ZERO_DATA) cuyos datos constan de nada más que ceros, se escribirán ceros en el disco durante toda la longitud de la escritura. Para evitar un intervalo del archivo y mantener la dispersión, use FSCTL_SET_ZERO_DATA.
Una aplicación con reconocimiento de dispersión también puede establecer un archivo existente para que sea disperso. Si una aplicación establece que un archivo existente sea disperso, debe examinar el archivo para las regiones que contienen ceros y usar FSCTL_SET_ZERO_DATA para restablecer esas regiones, lo que posiblemente desasigne algún almacenamiento de disco físico. Una aplicación actualizada al reconocimiento de archivos disperso debe realizar esta conversión.
Cuando se realiza una operación de lectura desde una parte de cero fuera de un archivo disperso, es posible que el sistema operativo no lea de la unidad de disco duro. En su lugar, el sistema reconoce que la parte del archivo que se va a leer contiene ceros y devuelve un búfer lleno de ceros sin leer realmente del disco.
Al igual que con cualquier otro archivo, el sistema puede escribir datos en o leer datos de cualquier posición en un archivo disperso. Los datos que no son ceros que se escriben en una parte previamente cero del archivo pueden dar lugar a la asignación de espacio en disco. Los ceros que se escriben en datos distintos de cero (solo con FSCTL_SET_ZERO_DATA) pueden dar lugar a una desasignación del espacio en disco.
Nota
Es necesario que la aplicación mantenga la dispersión escribiendo ceros con FSCTL_SET_ZERO_DATA.
Las herramientas de desfragmentación que controlan archivos comprimidos en sistemas de archivos NTFS controlarán correctamente archivos dispersos en volúmenes del sistema de archivos NTFS. Los archivos dispersos grandes y altamente fragmentados pueden superar la limitación de NTFS en extensiones de disco antes de usar el espacio disponible.