Qual é o comportamento esperado padrão quando o Windows encontra dois arquivos com o mesmo nome, mas com letras maiúsculas diferentes em uma partição NTFS?

16

É fácil gravar dois arquivos em uma partição NTFS a partir do Linux, e esses dois arquivos contêm as mesmas letras, mas com maiúsculas e minúsculas, por exemplo, some_file.txt e Some_File.txt. O Linux os distingue.

Como o Windows lida com isso?

trusktr
fonte
11
Pessoalmente, devido a todos os fatores envolvidos, eu diria apenas que isso causa comportamento indefinido. Se o Windows não definir o comportamento nesse caso, então, por definição, será indefinido. Se o Windows não definir o comportamento, eu ainda iria tratá-lo como um comportamento indefinido, porque eu duvido seriamente que todos os programas lidar com isso de forma consistente.
Jpfx1342

Respostas:

20

As personalidades do MS-DOS, WOW e Win32 retornarão o primeiro arquivo correspondente. Para alguns aplicativos e APIs, a diferenciação entre maiúsculas e minúsculas é imposta (por exemplo, o MS-DOS simplesmente não pode lidar com isso). A personalidade do POSIX se diferencia e diferencia maiúsculas de minúsculas por padrão (se você tiver as ferramentas UNIX instaladas, por exemplo). O prompt de comando nativo do Windows NT exibirá os dois, mas, dependendo das configurações (ObCaseInsensitive) e de quais APIs as ferramentas usam, acesse apenas o primeiro encontrado.

Consulte o artigo Microsoft Technet Os nomes de arquivos diferenciam maiúsculas de minúsculas em volumes NTFS (KB100625) e também uma discussão detalhada das sutilezas de distinção entre maiúsculas e minúsculas nos vários subsistemas do NT: Noções básicas sobre a diferenciação de maiúsculas e minúsculas no Windows: obcaseinsensitive, FILE_CASE_SENSITIVE_SEARCH

Em particular, o valor ObCaseInsensitive controla a distinção entre maiúsculas e minúsculas de todo o NT Object Manager:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • Quando definido como 0, o gerenciador de objetos é executado no modo sensível a maiúsculas e minúsculas.
  • Quando definido como 1, o gerenciador de objetos é executado no modo sem distinção entre maiúsculas e minúsculas.
  • Quando não especificado, o NT 5.1 (Windows XP) e as edições posteriores são executados no modo que não diferencia maiúsculas de minúsculas.
  • obcaseinsensitive não tem significado no NT 5.0 (Windows 2000) e versões anteriores do NT, que sempre são executadas no modo sensível a maiúsculas e minúsculas.

Cygwin deve pegar as configurações subjacentes / eficazes de sensibilidade a maiúsculas e minúsculas neste momento.

A pergunta relacionada ao superusuário Como configurar a distinção entre maiúsculas e minúsculas no nome da pasta no Windows 7? e artigo do TechNet Configurar sensibilidade de maiúsculas e minúsculas para nomes de arquivos e pastas têm mais informações sobre como ativar a sensibilidade de maiúsculas e minúsculas para arquivos e pastas no NT, se você precisar lidar com essa situação regularmente.

Recursos adicionais em ferramentas que diferenciam maiúsculas de minúsculas / acesso a volumes NTFS / NFS:

Maxx Daymon
fonte
Se existirem dois arquivos, One.txt e ONE.txt, qual arquivo "corresponderia primeiro" se eu fornecer um.txt? Existem regras nas quais será o "primeiro arquivo correspondente"?
trusktr 24/05
11
Provavelmente é baseado na ordem interna dos arquivos em um diretório. Vou tentar amanhã, se você quiser saber exatamente.
Daniel B
2
Qual é o primeiro é puramente decidido pela ordem em que aparecem no diretório. Esta não é necessariamente a ordem em que eles são criados. E isso pode mudar se um arquivo for modificado ou o diretório for atualizado. (Chkdsk, Defrag, apagar, copiar móveis outros arquivos nessa pasta podem alterar a ordem.)
Tonny
11
@trusktr Bem, aparentemente há algum tipo de ordem, afinal. Criei vários conjuntos de arquivos (usando NTFS-3G), cada um com diferentes letras maiúsculas e diferentes. O Windows (ou, mais precisamente, o Bloco de notas) sempre escolhe o arquivo começando com uma letra maiúscula, independentemente da ordem de criação. moreapenas retorna um ponto de interrogação.
Daniel B
11
@trusktr Ele seguirá a ordem das entradas INDX da árvore B + do diretório. Essa árvore é mantida classificada por design, mas pode variar um pouco, dependendo do driver NTFS. (OnCaseInsensitive = 0, API Win32 / DOS / WOW) será a primeira correspondência ao percorrer a árvore (classificada) do nome especificado e do nome da entrada INDX. O NTFS usa comparações ordinais, portanto, maiúsculas sempre devem ser encontradas antes de minúsculas. (AZ = 0041-005A, az = 0061-007A)
Maxx Daymon
2

Não faz. Ele considera as diferenças entre maiúsculas e minúsculas, mas, de outra forma, exatamente os mesmos nomes são o mesmo arquivo.

Você pode testar isso criando um arquivo em minúsculas e criando outro com apenas uma letra em maiúscula, e ela se queixará.

Casey
fonte
Não tenho o ambiente para testar isso agora. Eu só tenho OS X no momento. Você poderia descrever o que acontece? Meu primeiro palpite seria que o Windows seleciona (talvez inadvertidamente) qual arquivo será lido / gravado por alguns critérios (por exemplo, ordem lexical com letras minúsculas tendo precedência ou vice-versa). Ou não permite que nenhum arquivo seja manipulado?
trusktr
11
@trusktr O sistema reclama que o arquivo já existe, dependendo do aplicativo ou código envolvido, isso será ignorado silenciosamente e simplesmente substituirá o arquivo preexistente. Como jpfx1342 comentou , esse problema deve ser tratado como um comportamento indefinido.
Casey