Leggere in inglese

Condividi tramite


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.

Numero KB originale: 320081

Nota

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

Causa 1: Il file usa un elenco di controllo di accesso

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 in modo esplicito alcuna autorizzazione al file. I proprietari di file hanno la possibilità implicita di modificare le autorizzazioni per i file, anche se non vengono concesse in modo esplicito autorizzazioni al file. Pertanto, potrebbe essere necessario assumere 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 compilazione successiva di Cacls.exe).

Le voci di Controllo di accesso (ACL) in un elenco di controllo di accesso hanno una determinata sequenza preferita a seconda del tipo. Ad esempio, gli ACL che negano l'accesso vengono in genere 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 ha tentato 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 Windows. Questo problema è stato corretto 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 è in uso. 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 con handle aperti ai file ogni volta che si desidera.

I sintomi di questo problema possono variare. È possibile usare il comando Elimina per eliminare un file. Ma il file non viene eliminato fino a quando il processo con il file aperto 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 inserire i file in uno stato problematico:

  • Settori danneggiati sul 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 si riceve un messaggio che richiede l'esecuzione di Chkdsk. A seconda della natura del danneggiamento, Chkdsk può o meno recuperare i dati dei file. Tuttavia, Chkdsk restituisce il file system a uno stato coerente internamente.

Causa 4: I file sono presenti nei percorsi più profondi di MAX_PATH caratteri

Non è possibile aprire, modificare o eliminare un file in caso di 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 nel volume sono stati disabilitati 8.3 nomi, passare a Risoluzione 2. Per altre informazioni sulla disabilitazione dei nomi di file 8.3 nei volumi NTFS, vedere Come disabilitare la creazione dei nomi 8.3 nelle partizioni NTFS.

Risoluzione 2: Rinominare o spostare una cartella profonda

Rinominare la cartella in modo che i file di destinazione più profondi di quelli MAX_PATH non esistano più. In questo caso, iniziare dalla cartella radice o da qualsiasi altra posizione comoda. Rinominare quindi le cartelle in modo che abbiano nomi più brevi. Se questo passaggio non risolve questo problema, ad esempio se un file contiene più di 128 cartelle, passare a 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 abbrevia il percorso virtuale.

Si supponga, ad esempio, di avere un percorso strutturato nel modo seguente:

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

In questo percorso il numero totale di caratteri è superiore a 255 caratteri. Per brevità la lunghezza di questo percorso, fino a 73 caratteri, eseguire il mapping di un'unità a SubfolderName4.

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

Se le risoluzioni 1, 2 e 3 non sono utili o non risolvono il problema, creare una condivisione di rete profonda nell'albero delle cartelle possibile. 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 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 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 file include un nome riservato nello spazio dei nomi Win32

Se il nome 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, puoi usare alcuni comandi predefiniti per ignorare i tipici controlli del nome riservato Win32 se usi una sintassi specifica per specificare il percorso del file.

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

È possibile usare un programma Win32 per ignorare i controlli dei nomi tipici eseguiti quando un file viene creato o eliminato 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 sintassi Win32 tipica per aprire un file con spazi finali o periodi finali nel nome, gli spazi finali o i punti finali vengono rimossi prima dell'apertura del file effettivo. Ad esempio, sono presenti due file nella stessa cartella denominata AFile.txt e AFile.txt , prendere nota dello spazio dopo il nome del file. Se si tenta di aprire il secondo file usando chiamate Win32 standard, aprire 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, aprire invece la cartella padre del file. In questo caso, se si tenta di modificare le impostazioni di sicurezza in questi file, potrebbe non essere possibile farlo oppure è possibile modificare in modo imprevisto le impostazioni in file diversi. Se si verifica questo comportamento, si potrebbe pensare di disporre dell'autorizzazione per un file che ha effettivamente un elenco di controllo di accesso restrittivo.

Combinazioni di cause

In alcuni casi, è 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 al file a un file diverso o inesistente) e non è possibile eliminare il file. Se si tenta di risolvere La causa 1 prendendo 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 in 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 questo account abbia il controllo completo sul file. È ora possibile eliminare questo file usando il comando Del con la stessa "\\?\" sintassi.