Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Elimina un file esistente. Questa funzione avrà esito negativo se una parte di lpFileName viene reindirizzata tramite un punto reparse o un collegamento simbolico.
Per eseguire questa operazione come operazione transazionata, utilizzare la funzione DeleteFileTransacted .
Sintassi
BOOL DeleteFile2A(
LPCSTR lpFileName,
DWORD Flags
);
Parametri
lpFileName
Nome del file da eliminare.
Per impostazione predefinita, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite a 32.767 caratteri wide, anteporre "\\?\" al percorso. Per altre informazioni, vedere Denominazione di file, percorsi e spazi dei nomi.
Suggerimento
È possibile acconsentire esplicitamente per rimuovere la limitazione MAX_PATH senza anteporre "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima della lunghezza del percorso" di Denominazione di file, percorsi e spazi dei nomi .
Flags
Flag per specificare come trattare il file da eliminare. Questo parametro può essere una combinazione di uno dei valori seguenti:
Valore | Significato |
---|---|
FILE_FLAGS_DISALLOW_PATH_REDIRECTS0x00000001 |
Impedisci il reindirizzamento di lpFileName da punti reparse o collegamenti simbolici. |
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero.
Se la funzione ha esito negativo, il valore restituito è zero (0
). Per ottenere informazioni estese sull'errore, chiamare GetLastError. I possibili errori includono quanto segue:
Codice restituito | Descrizione |
---|---|
ERROR_PATH_REDIRECTED | lpFileName è stato reindirizzato da reparse points e/o da collegamenti simbolici. |
Osservazioni:
Se un'applicazione tenta di eliminare un file che non esiste, la funzione DeleteFile2 non riesce con ERROR_FILE_NOT_FOUND. Se il file è di sola lettura, la funzione ha esito negativo con ERROR_ACCESS_DENIED.
L'elenco seguente identifica alcuni suggerimenti per l'eliminazione, la rimozione o la chiusura di file:
- Per eliminare un file di sola lettura, è prima necessario rimuovere l'attributo di sola lettura.
- Per eliminare o rinominare un file, è necessario disporre dell'autorizzazione di eliminazione per il file o eliminare l'autorizzazione figlio nella directory padre.
- Per eliminare in modo ricorsivo i file in una directory, usare la funzione SHFileOperation .
- Per rimuovere una directory vuota, usare la funzione RemoveDirectory .
- Per chiudere un file aperto, usare la funzione CloseHandle .
Se si configura una directory con tutti gli accessi ad eccezione dell'eliminazione e dell'eliminazione figlio e gli elenchi di controllo di accesso (ACL) dei nuovi file vengono ereditati, è possibile creare un file senza poterlo eliminare. Tuttavia, è possibile creare un file e quindi ottenere tutto l'accesso richiesto sull'handle restituito al momento della creazione del file.
Se si richiede l'autorizzazione di eliminazione al momento della creazione di un file, è possibile eliminare o rinominare il file con tale handle, ma non con qualsiasi altro handle. Per altre informazioni, vedere Protezione dei file e diritti di accesso.
La funzione DeleteFile2 ha esito negativo se un'applicazione tenta di eliminare un file con altri handle aperti per i/O normali o come file mappato alla memoria (FILE_SHARE_DELETE deve essere stato specificato quando sono stati aperti altri handle).
La funzione DeleteFile2 contrassegna un file per l'eliminazione alla chiusura. Pertanto, l'eliminazione del file non viene eseguita fino alla chiusura dell'ultimo handle per il file. Le chiamate successive a CreateFile, CreateFile2 o CreateFile3 per aprire il file hanno esito negativo con ERROR_ACCESS_DENIED.
L'uso dell'eliminazione POSIX determina l'eliminazione del file mentre gli handle rimangono aperti. Le chiamate successive a CreateFile per aprire il file hanno esito negativo con ERROR_FILE_NOT_FOUND.
Comportamento del collegamento simbolico
Se il percorso punta a un collegamento simbolico, il collegamento simbolico viene eliminato, non la destinazione. Per eliminare una destinazione, è necessario chiamare CreateFile e specificare FILE_FLAG_DELETE_ON_CLOSE.
Questa funzione è supportata dalle tecnologie seguenti:
Tecnologia | Sostenuto |
---|---|
Protocollo SMB (Server Message Block) 3.0 | Sì |
SMB 3.0 Transparent Failover (TFO) | Sì |
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) | Sì |
Cluster Shared Volume File System (CsvFS) | Sì |
Resilient File System (ReFS) | Sì |
Annotazioni
L'intestazione fileapi.h
definisce DeleteFile2 come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per ulteriori informazioni, vedere Convenzioni per i prototipi di funzioni.
Esempi
Per un esempio, vedere Blocco e sblocco di intervalli di byte nei file.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 11 24H2 [app desktop | App UWP] |
server minimo supportato | Windows Server 2025 [app desktop | App UWP] |
intestazione | fileapi.h (include Windows.h) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |