Perché non è possibile nominare una cartella "._." In Windows 7?


74

Ho appena notato che non è possibile nominare una cartella ._.: viene ._invece nominata . A volte, scompare subito dopo averlo nominato ma riappare dopo aver aggiornato la vista. Windows sembra avere un problema con i punti alla fine di un nome file - perché è questo?


21
Vale la pena notare che ti sei imbattuto nel "hack" per iniziare un nome di file con un .in Windows.
jpmc26,

8
@ThisNameBetterBeAvailable Non testato, ma cd -- -_-potrebbe funzionare. Il --è un "fine delle opzioni" comuni marcatore.
TripeHound,

13
@ThisNameBetterBeAvailable No, --da solo significa " questa è la fine delle opzioni, considera qualsiasi cosa che inizia con -un valore letterale ". Appena testato: mkdir -- -_-e cd -- -_-funziona come mi aspettavo.
TripeHound,

2
In alternativa, ./-_-dovrebbe funzionare anche.
glglgl

5
@Alexander In Linux, dal momento che sembra essere dove sono andati i commenti, perché cd "-_-"la shell usa le virgolette per raggruppare ma non le tratta come parte dell'argomento; errori coninvalid option
Izkata

Risposte:


123

Windows richiede normalmente che i file non abbiano estensione o estensione lunga almeno un carattere; non è bello con estensioni di lunghezza zero, cioè nomi di file che terminano con .. Anche le cartelle possono avere estensioni, quindi Windows non lascia che i loro nomi finiscano con a .. Fonte, dall'articolo che DavidPostill ha collegato :

Utilizzare un punto per separare il nome del file di base dall'estensione nel nome di una directory o di un file .

(Enfasi mia.) Se si tenta di terminare un file o una directory denominata con un punto, Windows presuppone che non si desideri alcuna estensione e quindi la rimuove, anche se viene creata con mdun prompt dei comandi.

Zona pericolosa! Se desideri che il nome di una cartella finisca direttamente ., dovrai utilizzare la sequenza di override del nome magico grezzo di \\?\. In un prompt dei comandi, md \\?\C:\path\to\container\._.creerà effettivamente una cartella denominata ._., ma molti programmi avranno problemi con essa, anche Explorer:

._.  i problemi

Tale directory può essere rimossa solo con rdseguito dal suo \\?\nome o rinominata con il suo nome breve (8.3, dir /x).


1
Grazie per la tua risposta dettagliata! :) Penso che questa sarebbe una cartella perfetta per nascondere cose segrete come le password al suo interno, perché puoi aprire la cartella solo se la rinomini per prima, e non tutti sanno come rinominarla.
Black

19
@EdwardBlack non fermerebbe nessuno in grado di leggere lo scambio di stack (e quindi non fornirebbe nemmeno la sicurezza contro l'ipotetico fratellino). Il nome dato da lo dir /xrende abbastanza facile, e ci sono altre volte che questo nome è utile.
Chris H,

11
FWIW, gli strumenti da riga di comando di Cygwin possono anche creare (e manipolare) tali directory su Windows 7, senza usare una sequenza magica.
Steve Jessop,

4
@EdwardBlack Come citato da Chris H, non è molto segreto, quindi non dovresti archiviare nulla di particolarmente importante in una tale cartella. Inoltre, il segreto digitale e la protezione sono un problema che è stato risolto molte volte. È possibile utilizzare qualsiasi numero di metodi e programmi di crittografia per mantenere le cose sicure senza fare affidamento su nomi di cartelle oscuri.
Kris Harper,

3
Nitpick: almeno negli 8,3 giorni (non ho studiato ciò che è scritto su disco su NTFS) il periodo non è mai stato scritto sul disco in primo luogo. Il nome è stato diviso in nome ed estensione, sono stati memorizzati separatamente. Alla lettura ha preso il nome e se c'era un'estensione ha aggiunto il periodo e l'estensione al nome. Quindi non esisteva alcun modo per esprimere ._. nella struttura delle directory, ovviamente hai perso il punto finale.
Loren Pechtel,

22

Windows sembra avere un problema con i punti alla fine di un nome file? Perchè è questo?

Non terminare un nome di file o directory con uno spazio o un punto. Sebbene il file system sottostante possa supportare tali nomi, la shell di Windows e l'interfaccia utente no.

Il link di origine di seguito fornisce ulteriori dettagli sulle regole di denominazione.

File di denominazione di origine , percorsi e spazi dei nomi


5
Mi sembra ancora un bug.
Ralu,

@ralu Se si tratta di un bug, allora MS sembra essere totalmente disinteressato nel risolverlo. Tali restrizioni esistono da Windows XP (se non in precedenza).
DavidPostill

Windows XP? La mia ipotesi è che queste restrizioni hanno le loro radici in MS-DOS 0.x - chiediamo al signor Gates di chiarire il problema ...
Christian Severin,

17

Non è un errore. È progettato per prevenire problemi di compatibilità.
È un residuo dei vecchi tempi di DOS.

I filesystem FAT12 (floppy) e FAT16 (FAT16 prima del lungo supporto del nome file introdotto in Windows 95) avevano solo nomi file memorizzati in 11 byte:
8 byte per il nome, 3 per l'estensione. Il "periodo" tra nome ed estensione non è stato nemmeno memorizzato. È stato implicito e aggiunto automaticamente a scopo di visualizzazione.
Le directory non avevano affatto estensioni. Invece i 3 byte per l'estensione sono stati riempiti con caratteri "$" (che erano illegali nei nomi reali).
Poiché Windows è ancora compatibile con questo Explorer e molti altri componenti di Windows fanno scomparire silenziosamente il periodo finale per impedire la creazione di problemi di compatibilità.
Come altri hanno già affermato, puoi effettivamente gestire tali cartelle utilizzando la semantica RAW (\\? \ Prefisso prima del percorso assoluto).
Dietro le quinte NTFS e filesystem di rete non hanno problemi con tali file e cartelle. È solo un caso di Explorer che cerca di impedire all'utente di creare qualcosa che potrebbe causare problemi ad altri software.

(In effetti ci sono anche altri resti:
nomi di file come COM, COM1, COM2, AUX, PRN, LPT, LPT1, LPT2, LPT3, CON possono causare problemi simili in cui Explorer e molte altre parti di Windows vengono confuse perché questi nomi sono nomi "riservati" che risalgono anche all'era DOS.)


3
A tutti gli altri lettori che inizialmente erano increduli per il punto che non veniva archiviato: questo è corretto per CP / M e tutte le versioni di FAT, inclusi FAT16 e FAT32 .
Ben N

1
Ricordo un vecchio programma DOS (in esecuzione su DOS effettivo, probabilmente usando direttamente le funzioni INT13) che mi ha dato un vero dolore una volta riuscendo in qualche modo a creare un file chiamato a: foo.bar su c: drive ...
rackandboneman

2
@BenN: in realtà, su FAT32 è un po 'diverso; memorizza sia un nome file breve (8 + 3 byte con nomi compatibili all'indietro "punto implicito"), sia un nome file lungo (spesso denominato LFN), composto da un massimo di 255 caratteri UCS-2 con punto esplicito, e salvo che stai lavorando con applicazioni a 16 bit, lavori sempre con LFN.
Matteo Italia,

1
@MatteoItalia Sono consapevole che i nomi di file lunghi sono conservati in voci di file falsi; Le installazioni di Windows che sono al corrente cercano queste voci e, se possibile, le rendono invece dell'SFN. Vedi il post di Raymond Chen sull'argomento o la parte VFAT delle specifiche del formato FAT32 che ho collegato sopra.
Ben N

1
-1 ti sbagli sulle estensioni di directory; forse era vero per CP / M (la mia memoria è scadente per quel sistema operativo), ma sto usando la directory "programm.ing" nel mio albero dai tempi di DOS, e vedi win.tue.nl/~aeb/linux/ fs / fat / fat-1.html - le voci della directory sono gestite esattamente come file, possono avere anche il nome 8.3. Test: crea una directory 8.3 ( mkdir testfile.name) e visualizza il suo nome DOS in Windows ( dir /x) - otterrai TESTFI~1.NAM, come previsto.
vaxquis,

3

Il problema qui è che Windows (DOS) ha consentito i nomi di file 8.3 sui file system FAT. Significato, 8 caratteri, seguito da a. seguito da tre personaggi. Unix e Linux consentono qualsiasi carattere, tranne / e \ 0. \ 0 è il terminatore della stringa di caratteri C e / è il separatore di directory. Tutto il resto può essere usato.

Windows 95 ha risolto questo problema mantenendo un database di nomi di file brevi (8.3) e metadati di nomi di file lunghi (LFN). Se si cancellassero i file del sistema operativo Windows 95, alla successiva installazione di Windows 95 verrebbero lasciati file con nomi stranamente sul disco. Ad esempio, "Documenti" potrebbe essere denominato MYDOCU ~ 1 sul disco. Ovviamente, se perdessi i metadati, non saresti in grado di convertirli facilmente.

La shell deve far fronte a molti incrementi storici che restano in sospeso dai tempi di MS-DOS.

Spero che sia di aiuto


1
Non c'era davvero un database di per sé; Windows ha appena bloccato le parti del lungo nome del file sul disco come file falsi. Vedi il post di Raymond Chen sull'argomento .
Ben N
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.