Qual è il comportamento previsto predefinito quando Windows rileva due file con lo stesso nome ma con lettere maiuscole diverse in una partizione NTFS?


16

È facile scrivere due file su una partizione NTFS da Linux e avere entrambi quei file che contengono le stesse lettere ma con case diverse, ad esempio some_file.txt e Some_File.txt. Linux li distingue.

Come li gestisce Windows?


1
Personalmente, a causa di tutti i fattori coinvolti, direi solo che provoca comportamenti indefiniti. Se Windows non definisce il comportamento in questo caso, per definizione non è definito. Se Windows non definire il comportamento, vorrei ancora trattarlo come un comportamento indefinito, perché ho seri dubbi che tutti i programmi di gestire questo in modo coerente.
jpfx1342,

Risposte:


20

Le personalità MS-DOS, WOW e Win32 restituiranno il primo file corrispondente. Per alcune applicazioni e API, viene applicata la distinzione tra maiuscole e minuscole (ad esempio, MS-DOS non può gestirlo). La personalità POSIX si differenzia e distingue tra maiuscole e minuscole per impostazione predefinita (ad esempio se sono installati gli strumenti UNIX). Il prompt dei comandi di Windows NT nativo visualizzerà entrambi ma, a seconda delle impostazioni (ObCaseInsensitive) e delle API utilizzate dagli strumenti, accede solo al primo che trova.

Vedi l'articolo di Microsoft Technet I nomi dei file fanno distinzione tra maiuscole e minuscole sui volumi NTFS (KB100625) e anche una discussione dettagliata delle sottigliezze della distinzione tra maiuscole e minuscole nei vari sottosistemi NT: Comprensione della distinzione tra maiuscole e minuscole in Windows: obcaseinsensitive, FILE_CASE_SENSITIVE_SEARCH

In particolare, il valore ObCaseInsensitive controlla la distinzione tra maiuscole e minuscole dell'intero gestore oggetti NT:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • Se impostato su 0, il gestore oggetti viene eseguito in modalità case sensitive.
  • Se impostato su 1, il gestore oggetti viene eseguito in modalità senza distinzione tra maiuscole e minuscole.
  • Se non specificato, le versioni NT 5.1 (Windows XP) e successive vengono eseguite in modalità senza distinzione tra maiuscole e minuscole.
  • obcaseinsensitive non ha alcun significato in NT 5.0 (Windows 2000) e nelle versioni precedenti di NT, che funzionano sempre in modalità case sensitive.

A questo punto, Cygwin dovrebbe rilevare le impostazioni di sensibilità del caso effettive / effettive.

La domanda relativa al SuperUser Come configurare la distinzione tra maiuscole e minuscole del nome della cartella in Windows 7? e l'articolo TechNet Configura maiuscole / minuscole per i nomi di file e cartelle contengono ulteriori informazioni su come abilitare la distinzione maiuscole / minuscole per file e cartelle in NT se è necessario gestire questa situazione regolarmente.

Risorse aggiuntive su strumenti sensibili al maiuscolo / minuscolo / accesso ai volumi NTFS / NFS:


Se esistono due file, One.txt e ONE.txt, quale file "corrisponderebbe per primo" se fornissi one.txt? Ci sono delle regole su quale sarà il "primo file corrispondente"?
trusktr,

1
Probabilmente si basa sull'ordine dei file interni in una directory. Lo proverò domani, se vuoi sapere esattamente.
Daniel B,

2
Quale è il primo è puramente deciso dall'ordine in cui compaiono nella directory. Questo NON è necessariamente l'ordine in cui sono stati creati. E può cambiare se uno dei file viene modificato o il directoy viene aggiornato. (Chkdsk, Deframmentazione, eliminazione, copia spostando altri file in quella cartella possono cambiare l'ordine.)
Tonny

1
@trusktr Beh, a quanto pare c'è un qualche tipo di ordine, dopo tutto. Ho creato più set di file (usando NTFS-3G), ognuno con diverse maiuscole e in diversi ordini. Windows (o, più precisamente, Blocco note) seleziona sempre il file che inizia con una lettera maiuscola, indipendentemente dall'ordine di creazione. morerestituisce solo un punto interrogativo, però.
Daniel B,

1
@trusktr Seguirà l'ordine delle voci INDX dell'albero B + della directory. Questo albero viene mantenuto in ordine di progettazione, ma può variare leggermente a seconda del driver NTFS. (OnCaseInsensitive = 0, API Win32 / DOS / WOW) sarà la prima corrispondenza mentre si cammina sull'albero (ordinato) con il nome specificato e il nome della voce INDX. NTFS utilizza confronti ordinali, pertanto è necessario trovare sempre lettere maiuscole prima di lettere minuscole. (AZ = 0041-005A, az = 0061-007A)
Maxx Daymon

2

Non Considera le differenze tra maiuscole e minuscole, ma per il resto identici nomi identici sono lo stesso file.

Puoi verificarlo creando un file in minuscolo, quindi creandone un altro con solo una lettera in alto e si lamenterà.


Non ho l'ambiente per testarlo adesso. Al momento ho solo OS X. Potresti descrivere cosa succede? La mia prima ipotesi sarebbe che Windows scelga (forse inavvertitamente) quale file leggere / scrivere secondo alcuni criteri (ad es. Ordine lessicale con la precedenza in minuscolo o viceversa). O non consente di manipolare alcun file?
trusktr,

1
@trusktr Il sistema si lamenta che il file esiste già, a seconda dell'applicazione o del codice in questione, questo verrà silenziosamente ignorato e sovrascriverà semplicemente il file preesistente. Come commentato jpfx1342 , questo problema dovrebbe essere trattato come un comportamento indefinito.
Casey,
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.