Non è possibile eliminare un file o una cartella in un volume del file system NTFS

Questo articolo descrive perché non è possibile eliminare un file o una cartella in un volume del file system NTFS. Fornisce anche assistenza per risolvere questo problema.

Si applica a: Windows Server 2012 R2
Numero KB originale: 320081

Nota

Internamente, NTFS considera le cartelle come un tipo speciale di file. Pertanto, il file di parole in questo articolo indica un file o una cartella.

Causa 1: il file usa un ACL

Non è possibile eliminare un file se il file usa un elenco di Controllo di accesso ( ACL). Per risolvere questo problema, modificare le autorizzazioni per il file. Potrebbe essere necessario assumere la proprietà dei file per modificare le autorizzazioni.

Gli amministratori hanno la possibilità implicita di assumere la proprietà di qualsiasi file, anche se non sono state concesse esplicitamente autorizzazioni al file. I proprietari di file hanno la possibilità implicita di modificare le autorizzazioni per i file, anche se non vengono concesse esplicitamente autorizzazioni al file. Potrebbe quindi essere necessario acquisire la proprietà di un file, concedere a se stessi le autorizzazioni per eliminare il file e quindi eliminare il file.

Non è possibile usare determinati strumenti di sicurezza per visualizzare o modificare le autorizzazioni perché il file ha un ACL non canonico

Per risolvere questo problema, usare un altro strumento, ad esempio una build successiva di Cacls.exe.

Le voci Controllo di accesso (ACL) in un elenco di controllo di accesso hanno una sequenza preferita a seconda del tipo. Ad esempio, gli ACL che negano l'accesso in genere vengono prima degli ACL che concedono l'accesso. Tuttavia, nulla impedisce a un programma di scrivere un ACL con ACL in qualsiasi sequenza arbitraria. In alcune versioni precedenti di Windows si sono verificati problemi quando Windows tentava di leggere questi ACL non canonici. In alcuni casi non è possibile modificare correttamente questi elenchi di controllo di accesso usando l'editor di sicurezza grafico di Esplora risorse di Microsoft. Questo problema è stato risolto nelle versioni successive di Windows. Se si verifica questo problema, usare la versione più recente di Cacls.exe. Anche se non è possibile visualizzare o modificare un ACL sul posto, è possibile scrivere un nuovo ACL per ottenere l'accesso al file.

Causa 2: il file viene usato

Non è possibile eliminare un file se il file viene usato. Per risolvere questo problema, determinare il processo con l'handle aperto e quindi chiudere il processo.

A seconda della modalità di apertura del file, potrebbe non essere possibile eliminare un file in uso. Ad esempio, il file è aperto per l'accesso esclusivo anziché per l'accesso condiviso. È possibile usare vari strumenti per determinare i processi che hanno handle aperti ai file ogni volta che si desidera.

I sintomi di questo problema possono variare. È possibile usare il comando Delete per eliminare un file. Ma il file non viene eliminato fino a quando il processo con il file aperto non rilascia il file. Inoltre, potrebbe non essere possibile accedere alla finestra di dialogo Sicurezza per un file in sospeso. Per risolvere questo problema, determinare il processo con l'handle aperto e quindi chiudere il processo.

Causa 3: il danneggiamento del file system impedisce l'accesso al file

Non è possibile eliminare il file se il file system è danneggiato. Per risolvere questo problema, eseguire l'utilità Chkdsk nel volume del disco per correggere eventuali errori.

I motivi seguenti possono danneggiare il file system e mettere i file in uno stato problematico:

  • Settori non validi nel disco
  • Altro hardware difettoso
  • Bug software

Le operazioni tipiche possono avere esito negativo in vari modi. Quando il file system rileva il danneggiamento, registra un evento nel registro eventi e in genere viene visualizzato un messaggio che richiede di eseguire Chkdsk. A seconda della natura del danneggiamento, Chkdsk può recuperare o meno i dati dei file. Tuttavia, Chkdsk restituisce il file system a uno stato coerente internamente.

Causa 4: i file sono presenti in percorsi più profondi di MAX_PATH caratteri

Non è possibile aprire, modificare o eliminare un file se si verificano problemi con il percorso del file.

Risoluzione 1: usare un nome 8.3 generato automaticamente per accedere al file

Per risolvere questo problema, è possibile usare il nome 8.3 generato automaticamente per accedere al file. Questa risoluzione può essere la risoluzione più semplice se il percorso è profondo perché i nomi delle cartelle sono troppo lunghi. Se anche il percorso 8.3 è troppo lungo o se i nomi 8.3 sono stati disabilitati nel volume, passare a Risoluzione 2. Per altre informazioni sulla disabilitazione dei nomi di file 8.3 nei volumi NTFS, vedere Come disabilitare la creazione di nomi 8.3 nelle partizioni NTFS.

Risoluzione 2: Rinominare o spostare una cartella completa

Rinominare la cartella in modo che i file di destinazione più profondi di MAX_PATH non esistano più di . In questo caso, iniziare dalla cartella radice o da qualsiasi altra posizione pratica. Rinominare quindi le cartelle in modo che abbiano nomi più brevi. Se questo passaggio non risolve questo problema, ad esempio, se un file è profondo più di 128 cartelle, passare alla risoluzione 4.

Risoluzione 3: eseguire il mapping di un'unità a una cartella nella struttura del percorso

Eseguire il mapping di un'unità a una cartella all'interno della struttura del percorso del file o della cartella di destinazione. Questo metodo riduce il percorso virtuale.

Si supponga, ad esempio, di avere un percorso strutturato come segue:

\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...

In questo percorso, il numero totale di caratteri è superiore a 255 caratteri. To short the length of this path, to 73 characters, map a drive to SubfolderName4.

Risoluzione 4: usare una condivisione di rete profonda quanto la cartella

Se le risoluzioni 1, 2 e 3 non sono convenienti o non consentono di risolvere il problema, creare una condivisione di rete più profonda possibile nell'albero delle cartelle. Rinominare quindi le cartelle accedendo alla condivisione.

Risoluzione 5: usare uno strumento in grado di attraversare percorsi profondi

Molti programmi Windows prevedono che la lunghezza massima del percorso sia inferiore a 255 caratteri. Questi programmi allocano solo spazio di archiviazione interno sufficiente per gestire questi percorsi tipici. NTFS non ha questo limite e può contenere percorsi molto più lunghi.

Questo problema può verificarsi se si crea una condivisione a un certo punto nella struttura di cartelle che è già abbastanza profonda e quindi si crea una struttura profonda al di sotto di tale punto usando la condivisione. Alcuni strumenti che operano localmente nell'albero delle cartelle potrebbero non essere in grado di attraversare l'intero albero a partire dalla radice. Potrebbe essere necessario usare questi strumenti in modo speciale in modo che possano attraversare la condivisione. La documentazione dell'API CreateFile descrive un metodo per attraversare l'intero albero in questa situazione.

In genere, è possibile gestire i file usando il software che li crea. Se si dispone di un programma in grado di creare file più profondi di MAX_PATH, è in genere possibile usare lo stesso programma per eliminare o gestire i file. In genere è possibile eliminare i file creati in una condivisione usando la stessa condivisione.

Causa 5: il nome del file include un nome riservato nello spazio dei nomi Win32

Se il nome del file include un nome riservato nello spazio dei nomi Win32, ad esempio lpt1, non è possibile eliminare il file. Per risolvere questo problema, usare un programma non Win32 per rinominare il file. È possibile usare uno strumento POSIX o qualsiasi altro strumento che usa la sintassi interna appropriata per usare il file.

Inoltre, è possibile usare alcuni comandi predefiniti per ignorare i controlli dei nomi riservati Win32 tipici se si usa una specifica sintassi per specificare il percorso del file.

Se si apre un handle a un file usando il tipico meccanismo Win32 CreateFile, alcuni nomi di file sono riservati ai dispositivi DOS di vecchio stile. Per motivi di compatibilità con le versioni precedenti, questi nomi di file non sono consentiti e non possono essere creati usando le tipiche chiamate di file Win32. Questo problema non è una limitazione di NTFS.

È possibile usare un programma Win32 per ignorare i controlli dei nomi tipici eseguiti quando viene creato o eliminato un file usando la stessa tecnica usata per attraversare le cartelle più profonde di MAX_PATH. Inoltre, alcuni strumenti POSIX non sono soggetti a questi controlli dei nomi.

Causa 6: il nome del file include un nome non valido nello spazio dei nomi Win32

Non è possibile eliminare un file se il nome del file include un nome non valido. Ad esempio, il nome del file ha uno spazio finale o un punto finale oppure il nome del file è costituito solo da uno spazio. Per risolvere questo problema, usare uno strumento che usa la sintassi interna appropriata per eliminare il file. È possibile usare la "\\?\" sintassi con alcuni strumenti per operare su questi file. Ecco un esempio:

del "\\?\c:\<path_to_file_that contains a trailing space.txt>"

La causa di questo problema è simile alla causa 4. Se usi la tipica sintassi Win32 per aprire un file con spazi finali o punti finali nel nome, gli spazi finali o i punti vengono rimossi prima dell'apertura del file effettivo. Ad esempio, nella stessa cartella sono presenti due file denominati AFile.txt e AFile.txt , annotare lo spazio dopo il nome del file. Se si tenta di aprire il secondo file usando chiamate Win32 standard, si apre invece il primo file. Analogamente, se si dispone di un file il cui nome è solo un carattere di spazio e si tenta di aprirlo usando chiamate Win32 standard, si apre invece la cartella padre del file. In questo caso, se si tenta di modificare le impostazioni di sicurezza in questi file, è possibile che non sia possibile farlo oppure modificare in modo imprevisto le impostazioni in file diversi. Se si verifica questo comportamento, si potrebbe pensare di avere l'autorizzazione per un file che ha effettivamente un ACL restrittivo.

Combinazioni di cause

A volte, è possibile che si verifichino combinazioni di queste cause. Può rendere più complessa la procedura per eliminare un file. Ad esempio, se si accede come amministratore del computer, è possibile che si verifichi una combinazione di Causa 1 (non si dispone delle autorizzazioni per eliminare un file) e Causa 5 (il nome del file contiene un carattere finale che causa il reindirizzamento dell'accesso ai file a un file diverso o inesistente) e non è possibile eliminare il file. Se si tenta di risolvere la causa 1 acquisendo la proprietà del file e aggiungendo autorizzazioni, potrebbe comunque non essere possibile eliminare il file, perché l'editor ACL nell'interfaccia utente non può accedere al file appropriato a causa della causa 6.

In questo caso, è possibile usare l'utilità Subinacl con l'opzione /onlyfile (questa utilità è inclusa nel Resource Kit) per modificare la proprietà e le autorizzazioni per un file altrimenti inaccessibile. Ecco un esempio:

subinacl /onlyfile "\\?\c:\<path_to_problem_file>" /setowner= domain\administrator /grant= domain\administrator=F

Nota

Questo comando è una singola riga di comando di cui è stato eseguito il wrapping per la leggibilità.

Questa riga di comando di esempio modifica il C:\<path_to_problem_file> file che contiene uno spazio finale in modo che l'account domain\administrator sia il proprietario del file e che l'account abbia il controllo completo sul file. È ora possibile eliminare questo file usando il comando Del con la stessa "\\?\" sintassi.