Operações de arquivo esparsas
Para determinar se um sistema de arquivos suporta arquivos esparsos, chame a função GetVolumeInformation e examine o sinalizador de FILE_SUPPORTS_SPARSE_FILES bits 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 que um aplicativo está lendo um arquivo esparso é transparente para o aplicativo. Um aplicativo que está ciente de arquivos esparsos deve determinar se seu conjunto de dados é adequado para ser mantido em um arquivo esparso. Depois que essa determinação é feita, o aplicativo deve declarar explicitamente um arquivo como esparso, usando o código de controle FSCTL_SET_SPARSE.
Depois que um aplicativo define um arquivo para ser esparso, o aplicativo pode 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 as pesquisas por dados diferentes de 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 zerar um intervalo do arquivo e manter a parcimônia, use FSCTL_SET_ZERO_DATA.
Um aplicativo com reconhecimento de esparsidade 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 usáFSCTL_SET_ZERO_DATA para redefinir essas regiões, possivelmente deslocalizando 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 zerada de um arquivo esparso, o sistema operacional não pode 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.
Como com qualquer outro arquivo, o sistema pode gravar dados ou ler dados de qualquer posição em um arquivo esparso. Dados diferentes de zero sendo gravados em uma parte do arquivo previamente zerada podem resultar na alocação de espaço em disco. Zeros sendo gravados sobre dados diferentes de zero (somente com FSCTL_SET_ZERO_DATA) podem resultar em uma desalocação de espaço em disco.
Observação
Cabe ao aplicativo manter a parcimônia escrevendo zeros com FSCTL_SET_ZERO_DATA.
As ferramentas de desfragmentação que lidam com arquivos compactados em sistemas de arquivos NTFS lidarão corretamente com arquivos esparsos em volumes do sistema de arquivos NTFS. Arquivos esparsos grandes e altamente fragmentados podem exceder a limitação NTFS em extensões de disco antes que o espaço disponível seja usado.