¿Cuál es el comportamiento esperado predeterminado cuando Windows encuentra dos archivos con el mismo nombre pero con mayúsculas diferentes en una partición NTFS?

16

Es fácil escribir dos archivos en una partición NTFS desde Linux, y ambos archivos contienen las mismas letras pero con mayúsculas y minúsculas, por ejemplo some_file.txt y Some_File.txt. Linux los distingue.

¿Cómo maneja Windows esto?

trusktr
fuente
1
Personalmente, debido a todos los factores involucrados, solo diría que causa un comportamiento indefinido. Si Windows no define el comportamiento en este caso, entonces, por definición, no está definido. Si Windows hace definir el comportamiento, todavía me tratan como un comportamiento indefinido, porque tengo serias dudas de que todos los programas manejan esto de forma consistente.
jpfx1342

Respuestas:

20

Las personalidades de MS-DOS, WOW y Win32 devolverán el primer archivo coincidente. Para algunas aplicaciones y API, se aplica la insensibilidad a mayúsculas y minúsculas (por ejemplo, MS-DOS simplemente no puede manejarlo). La personalidad POSIX será diferenciar entre mayúsculas y minúsculas y es por defecto (si tiene instaladas las herramientas de UNIX, por ejemplo). El símbolo del sistema nativo de Windows NT mostrará ambos, pero, según la configuración (ObCaseInsensitive) y las API que usan las herramientas, solo accederá al primero que encuentre.

Consulte el artículo de Microsoft Technet Los nombres de archivo distinguen entre mayúsculas y minúsculas en volúmenes NTFS (KB100625) y también una discusión detallada de las sutilezas de mayúsculas y minúsculas en los diversos subsistemas NT: Comprensión de mayúsculas y minúsculas en obcaseinsensible, FILE_CASE_SENSITIVE_SEARCH

En particular, el valor ObCaseInsensitive controla la distinción entre mayúsculas y minúsculas de todo el NT Object Manager:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • Cuando se establece en 0, el administrador de objetos se ejecuta en modo sensible a mayúsculas y minúsculas.
  • Cuando se establece en 1, el administrador de objetos se ejecuta en modo sin distinción entre mayúsculas y minúsculas.
  • Cuando no se especifica, NT 5.1 (Windows XP) y las ediciones posteriores se ejecutan por defecto en modo sin distinción de mayúsculas y minúsculas.
  • obcaseinsensitive no tiene ningún significado en NT 5.0 (Windows 2000) y versiones anteriores de NT, que siempre se ejecutan en modo de mayúsculas y minúsculas.

Cygwin debería elegir la configuración de sensibilidad de mayúsculas / minúsculas subyacente / efectiva en este punto.

La pregunta relacionada del Superusuario ¿ Cómo configurar la distinción entre mayúsculas y minúsculas en Windows 7? y el artículo de TechNet Configurar mayúsculas y minúsculas para nombres de archivos y carpetas tienen más información sobre cómo habilitar mayúsculas y minúsculas para archivos y carpetas en NT si necesita manejar esta situación regularmente.

Recursos adicionales sobre herramientas / acceso sensibles a mayúsculas y minúsculas a volúmenes NTFS / NFS:

Maxx Daymon
fuente
Si existen dos archivos, One.txt y ONE.txt, ¿qué archivo "coincidirá primero" si proporciono one.txt? ¿Existen reglas sobre cuál será el "primer archivo coincidente"?
trusktr
1
Probablemente se basa en el orden de los archivos internos en un directorio. Lo intentaré mañana, si quieres saber exactamente.
Daniel B
2
Cuál es primero se decide únicamente por el orden en que aparecen en el directorio. Este NO es necesariamente el orden en que se crean. Y puede cambiar si se modifica cualquiera de los archivos o si se actualiza el directorio. (Chkdsk, Defrag, eliminar, copiar y mover otros archivos en esa carpeta pueden cambiar el orden.)
Tonny
1
@trusktr Bueno, aparentemente hay algún tipo de orden, después de todo. Creé múltiples conjuntos de archivos (usando NTFS-3G), cada uno con diferentes mayúsculas y en diferentes órdenes. Windows (o, más precisamente, el Bloc de notas) siempre elige el archivo que comienza con una letra mayúscula, independientemente del orden de creación. moreSin embargo, solo devuelve un signo de interrogación.
Daniel B
1
@trusktr Seguirá el orden de las entradas INDX del árbol B + del directorio. Este árbol se mantiene ordenado por diseño, pero puede variar ligeramente según el controlador NTFS. (OnCaseInsensitive = 0, Win32 / DOS / WOW API) será la primera coincidencia mientras recorre el árbol (ordenado) del nombre especificado y el nombre de entrada INDX. NTFS utiliza comparaciones ordinales, por lo que siempre se debe encontrar mayúsculas antes que minúsculas. (AZ = 0041-005A, az = 0061-007A)
Maxx Daymon
2

No lo hace. Considera las diferencias entre mayúsculas y minúsculas, pero los mismos nombres exactos son el mismo archivo.

Puede probar esto creando un archivo en minúsculas, luego creando otro con solo una letra en mayúscula y se quejará.

Casey
fuente
No tengo el entorno para probar eso ahora mismo. Solo tengo OS X en este momento. ¿Podrías describir lo que pasa? Mi primera suposición sería que Windows elige (quizás sin darse cuenta) qué archivo leer / escribir según algunos criterios (por ejemplo, el orden léxico con minúsculas tiene prioridad, o viceversa). ¿O no permite que ningún archivo sea manipulado?
trusktr
1
@trusktr El sistema se queja de que el archivo ya existe, dependiendo de la aplicación o el código involucrado, esto se ignorará en silencio y simplemente sobrescribirá el archivo preexistente. Como comentó jpfx1342 , este problema debe tratarse como un comportamiento indefinido.
Casey