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 son conscientes de 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. Una vez realizada la determinación, la aplicación debe declarar explícitamente un archivo como disperso, utilizando 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 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.

Al realizar 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, los ceros se escribirán en el disco durante toda la longitud de la escritura. Para que no se agote un intervalo del archivo y mantenga la dispersión, use FSCTL_SET_ZERO_DATA.

Una aplicación con reconocimiento de dispersión también puede establecer un archivo existente que se va a dispersar. Si una aplicación establece que un archivo existente sea disperso, debe examinar el archivo en busca de regiones que contengan 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 sin cero 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 o leer datos de cualquier posición en un archivo disperso. Los datos distintos de cero 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 sobre datos distintos de cero (solo con FSCTL_SET_ZERO_DATA) pueden dar lugar a una desasignación de 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 los archivos dispersos en volúmenes del sistema de archivos NTFS. Los archivos dispersos grandes y muy fragmentados pueden superar la limitación ntfs en las extensiones de disco antes de que se use el espacio disponible.