Operações de arquivo esparso
Para determinar se um sistema de arquivos dá suporte a arquivos esparsos, chame a função GetVolumeInformation e examine o sinalizador de bits FILE_SUPPORTS_SPARSE_FILES retornado por meio do parâmetro lpFileSystemFlags.
A maioria dos aplicativos não está ciente de arquivos esparsos e não criará arquivos esparsos. O fato de um aplicativo estar lendo um arquivo esparso é transparente para o aplicativo. Um aplicativo que esteja ciente de arquivos esparsos deve determinar se seu conjunto de dados é adequado para ser mantido em um arquivo esparso. Depois que essa determinação for feita, o aplicativo deverá declarar explicitamente um arquivo como esparso, usando o código de controle FSCTL_SET_SPARSE.
Depois que um aplicativo definir um arquivo como esparso, o aplicativo poderá usar o código de controle FSCTL_SET_ZERO_DATA para definir uma região do arquivo como zero. Além disso, o aplicativo pode usar o código de controle FSCTL_QUERY_ALLOCATED_RANGES para acelerar pesquisas de dados não zero no arquivo esparso.
Quando você executa uma operação de gravação (com uma função ou operação diferente de FSCTL_SET_ZERO_DATA) cujos dados consistem em nada além de zeros, zeros serão gravados no disco durante todo o comprimento da gravação. Para zerado um intervalo do arquivo e manter a esparsidade, use FSCTL_SET_ZERO_DATA.
Um aplicativo com reconhecimento de esparsa também pode definir um arquivo existente como esparso. Se um aplicativo definir um arquivo existente como esparso, ele deverá verificar o arquivo em busca de regiões que contenham zeros e usar FSCTL_SET_ZERO_DATA para redefinir essas regiões, possivelmente desalocando algum armazenamento em disco físico. Um aplicativo atualizado para reconhecimento de arquivo esparso deve executar essa conversão.
Quando você executa uma operação de leitura de uma parte zerado de um arquivo esparso, o sistema operacional pode não ler a partir da unidade de disco rígido. Em vez disso, o sistema reconhece que a parte do arquivo a ser lido contém zeros e retorna um buffer cheio de zeros sem realmente ler do disco.
Assim como acontece com qualquer outro arquivo, o sistema pode gravar dados ou ler dados de qualquer posição em um arquivo esparso. Dados não zero sendo gravados em uma parte anteriormente zero do arquivo podem resultar na alocação de espaço em disco. Zeros sendo gravados em dados não zero (somente com FSCTL_SET_ZERO_DATA) podem resultar em uma desalocação do espaço em disco.
Nota
Cabe ao aplicativo manter a esparsidade gravando zeros com FSCTL_SET_ZERO_DATA.
As ferramentas de desfragmentação que lidam com arquivos compactados em sistemas de arquivos NTFS manipularão corretamente arquivos esparsos em volumes do sistema de arquivos NTFS. Arquivos esparsos grandes e altamente fragmentados podem exceder a limitação do NTFS em extensões de disco antes que o espaço disponível seja usado.