Operazioni di file sparse

Per determinare se un file system supporta file sparse, chiamare la funzione GetVolumeInformation ed esaminare il flag di bit FILE_SUPPORTS_SPARSE_FILES restituito tramite il parametro lpFileSystemFlags .

La maggior parte delle applicazioni non riconosce i file sparse e non crea file sparse. Il fatto che un'applicazione stia leggendo un file sparse sia trasparente per l'applicazione. Un'applicazione che riconosce i file sparse deve determinare se il set di dati è adatto per essere conservato in un file sparse. Dopo aver determinato tale determinazione, l'applicazione deve dichiarare in modo esplicito un file come sparse, usando il codice di controllo FSCTL_SET_SPARSE .

Dopo che un'applicazione ha impostato un file come sparse, l'applicazione può usare il codice di controllo FSCTL_SET_ZERO_DATA per impostare un'area del file su zero. Inoltre, l'applicazione può usare il codice di controllo FSCTL_QUERY_ALLOCATED_RANGES per velocizzare le ricerche di dati diversi da zero nel file sparse.

Quando si esegue un'operazione di scrittura (con una funzione o un'operazione diversa da FSCTL_SET_ZERO_DATA) i cui dati sono costituiti da zero, gli zeri verranno scritti sul disco per tutta la lunghezza della scrittura. Per evitare un intervallo del file e mantenere la sparsezza, usare FSCTL_SET_ZERO_DATA.

Un'applicazione compatibile con sparse può anche impostare un file esistente come sparse. Se un'applicazione imposta un file esistente come sparse, deve quindi analizzare il file per individuare le aree che contengono zeri e usare FSCTL_SET_ZERO_DATA per reimpostare tali aree, deallocazione di alcune risorse di archiviazione su disco fisico. Un'applicazione aggiornata alla consapevolezza dei file sparse deve eseguire questa conversione.

Quando si esegue un'operazione di lettura da una parte zero-out di un file sparse, il sistema operativo potrebbe non leggere dall'unità disco rigido. Il sistema riconosce invece che la parte del file da leggere contiene zeri e restituisce un buffer pieno di zeri senza effettivamente leggere dal disco.

Come per qualsiasi altro file, il sistema può scrivere dati in o leggere dati da qualsiasi posizione in un file sparse. I dati diversi da zero scritti in una parte precedentemente zero del file possono comportare l'allocazione dello spazio su disco. Gli zeri scritti su dati diversi da zero (solo con FSCTL_SET_ZERO_DATA) possono comportare una deallocazione dello spazio su disco.

Nota

Spetta all'applicazione mantenere la sparsezza scrivendo zeri con FSCTL_SET_ZERO_DATA.

 

Gli strumenti di deframmentazione che gestiscono i file compressi nei file system NTFS gestiranno correttamente i file sparse nei volumi del file system NTFS. I file sparse di grandi dimensioni e altamente frammentati possono superare la limitazione NTFS negli extent del disco prima dell'uso dello spazio disponibile.