Condividi tramite


FSCTL_SET_SPARSE IOCTL (winioctl.h)

Contrassegna il file indicato come sparse o meno sparse. In un file sparse, gli intervalli di zeri di grandi dimensioni potrebbero non richiedere l'allocazione del disco. Lo spazio per i dati diversi da zero verrà allocato in base alle esigenze durante la scrittura del file.

Per eseguire questa operazione, chiamare la funzione DeviceIoControl con i parametri seguenti.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                         // handle to a file
  FSCTL_SET_SPARSE,                         // dwIoControlCode
  (PFILE_SET_SPARSE_BUFFER) lpInBuffer,     // input buffer
  (DWORD) nInBufferSize,                    // size of input buffer
  NULL,                                     // lpOutBuffer
  0,                                        // nOutBufferSize
  (LPDWORD) lpBytesReturned,                // number of bytes returned
  (LPOVERLAPPED) lpOverlapped               // OVERLAPPED structure
);

Commenti

Per le implicazioni dell'I/O sovrapposto in questa operazione, vedere la sezione Osservazioni di DeviceIoControl.

Il codice di controllo FSCTL_SET_SPARSE imposta o cancella l'attributo FILE_ATTRIBUTE_SPARSE_FILE del file specificato.

Windows Server 2008 R2, Windows 7, Windows Server 2008 e Windows Vista: Un'operazione chiara è valida solo per i file che non hanno più aree di tipo sparse. L'esecuzione di un'operazione chiara su un file con aree sparse può avere risultati imprevedibili. È possibile determinare se sono presenti aree di tipo sparse in un file usando il codice di controllo FSCTL_QUERY_ALLOCATED_RANGES .

Se il parametro lpInBuffer è NULL, l'operazione si comporterà come se il membro SetSparse della struttura FILE_SET_SPARSE_BUFFER fosse TRUE. In altre parole, l'operazione imposta il file su un file sparse.

Windows Server 2003 e Windows XP: Se viene passata una struttura FILE_SET_SPARSE_BUFFER nel parametro lpInBuffer , l'unico valore valido per il membro SetSparse è TRUE, che imposta il file su un file sparse. Se si passa FALSE nella struttura FILE_SET_SPARSE_BUFFER , questa chiamata di funzione avrà esito negativo. L'unico modo per cancellare questo attributo consiste nel sovrascrivere il file, ad esempio chiamando la funzione CreateFile con il flag CREATE_ALWAYS .

Non è possibile creare un file sparse chiamando CreateFile con FILE_ATTRIBUTE_SPARSE_FILE nel parametro dwFlagsAndAttributes . È necessario usare il codice di controllo FSCTL_SET_SPARSE .

Si noti che i timestamp potrebbero non essere aggiornati correttamente per un file remoto. Per garantire risultati coerenti, usare l'I/O non memorizzato nel buffer.

In Windows 8 e Windows Server 2012 questo codice è supportato dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0
Failover trasparente SMB 3.0 (TFO)
SMB 3.0 con condivisioni file di scalabilità orizzontale (SO)
File system del volume condiviso cluster (CsvFS) Vedere Commento
Resilient File System (ReFS)

CsvFs eseguirà operazioni di I/O reindirizzate per i file sparse. CsvFs consente di creare file sparse solo quando il file viene aperto esclusivamente da un nodo. SMB 3.0 Transparent Failover non supporta la scrittura memorizzata nel buffer.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione winioctl.h (include Windows.h)

Vedi anche