2013-07-26 12 views
25

Ho eseguito un programma su Windows 7 che è stato compilato in Cygwin e passato "NUL" come nome file di output. Invece di sopprimere l'output, in realtà ha creato un file denominato "NUL" nella directory corrente. (Apparentemente si aspetta "/ dev/null", anche su Windows.) Ora sono bloccato con questo file "NUL" che non riesco a cancellare!Elimina un file denominato "NUL" su Windows

ho già provato:

  • di Windows Explorer - l'errore: "Funzione non valido MS-DOS" (! Sì, che è sul serio quello che dice)
  • prompt dei comandi utilizzando "del NUL" - errore: "La sintassi dell'etichetta nome file, nome directory o volume non è corretta."
  • Cancellare l'intera directory - accordo stesso come solo l'eliminazione del file
  • remove() in un programma C - viene a mancare anche

Come posso liberarmi di questi file NUL (Ho diversi ormai), a breve di installare l'ambiente Cygwin completo e compilare un programma C sotto Cygwin per farlo?

risposta

58

Aprire un prompt dei comandi e utilizzare questi comandi per rinominare e poi eliminare il file NUL:

C:\> rename \\.\C:\..\NUL. deletefile.txt 
C:\> del deletefile.txt 

Utilizzando il prefisso \\.\ dice il file di alto livello funzioni di I/O per passare il nome del file non analizzata al driver di periferica: in questo modo è possibile accedere a nomi altrimenti non validi.

Leggi this article sui nomi file/percorso validi in Windows e i vari nomi riservati.

+1

È interessante notare che Far Manager può eliminare quel file senza problemi. Forse usa quel trucco internamente incondizionatamente. – Joey

+8

Grande, grazie! Anche cancellarlo direttamente sembra funzionare se uso il prefisso \\. \ Prima del percorso completo, ad es. del \\. \ C: \ Temp \ NUL – EM0

+0

@ On su Windows 8 Lontano ha avuto problemi con l'eliminazione/creazione di un file denominato 'nul ', ma sto usando v1.75 - v3.0 potrebbe avere quella funzionalità aggiunta. – xxbbcc

-2

Provare a scrivere un breve programma C che chiama l'API di Windows per eliminare quel file.

http://msdn.microsoft.com/en-us/library/aa363915%28v=vs.85%29.aspx

Se questo non funziona, provare ad aprire un handle per il file con CreateFile() con FILE_FLAG_DELETE_ON_CLOSE, e quindi chiudere la maniglia.

+0

Abbastanza sicuro che questo sarebbe interpretato dal livello Win32 come riferito al cosiddetto dispositivo "DOS", non al file. (Presumibilmente, il dispositivo "DOS" in realtà non verrebbe eliminato, perché se fosse una cosa che potrebbe essere fatta per caso piuttosto che essere sicuro che sarebbe successo a qualcuno che partecipava qui o a https: // superuser. it/questions/282194/how-do-i-remove-a-file-named-nul-on-windows ...) – SamB

2

Ho avuto un problema simile. Probabilmente è stato causato anche da Cygwin (dato che lo uso regolarmente), ma da allora ho dimenticato esattamente come è stato creato il file.

Ho anche avuto problemi a cancellarlo. Ho seguito il consiglio di alcuni altri post e ho provato l'avvio in modalità provvisoria per eliminare il file, anche se questo non ha fatto nulla. Il suggerimento di + xxbbcc non ha funzionato neanche per me.

Tuttavia, sono stato in grado di eliminare il file utilizzando il terminale Cygwin! Cygwin crea e Cygwin distrugge.

+3

Se hai Cygwin, prova con 'Nm NUL'. Ha funzionato per me. –

+1

Ho avuto un problema simile a quello notato da Jan E., tranne che sto usando Windows Subsystem su Linux (WSL). 'Rm' di WSL bash ha cancellato il file. –

0

Ho risolto questo in un modo leggermente diverso.

Ho pensato di aggiungere questo perché è alto nei risultati di Google e ho riscontrato un problema simile per una cartella denominata NUL.

Ho provato rmdir\\?\C:\My\Path\NUL e rmdir\\.\C:\My\Path\NUL senza alcun successo e ho anche provato diversi comandi utilizzando bash dall'installazione di SourceTree. Nessuna gioia.

Alla fine ho usato DIR /X /A da cmd per elencare i nomi brevi nella directory superiore.Questo mi ha mostrato NUL~1 per la mia cartella NUL e ho identificato il nocciolo del problema.

Questo è stato quindi utilizzato nel comando standard rmdir /s NUL~1 e infine risolto il problema.

+0

Penso che il tuo sia un caso leggermente diverso in cui il * nome lungo * della directory è "NUL", ma il nome MSDOS 8.3 non lo è. Quindi questo è utile sapere, ma non è lo stesso del mio problema originale, che ho appena testato di nuovo usando Cygwin. Dopo l'esecuzione di 'mkdir nul' in cygwin' dir/x/a' non mostra un nome breve, quindi la cartella è davvero chiamata "nul". 'rd \\? \ C: \ Path \ NUL' e' rd \\. \ C: \ Path \ NUL' funzionano entrambi in questo caso. – EM0

Problemi correlati