Por que você não pode usar caracteres especiais em um nome de arquivo, como "?" Ou ";"?

17

Quando tento salvar um arquivo, se eu usar caracteres especiais no nome (como dois pontos, ponto de interrogação ou ponto de exclamação) no Windows, recebo uma mensagem informando que o nome do arquivo é inválido.

Por que é que?

user284989
fonte
Em qual programa você está tentando salvar um arquivo e o caractere ofensivo está no arquivo ou (como parece) no nome do arquivo?
Jukka K. Korpela

Respostas:

22

Existem vários caracteres com significado especial para o Windows (e para o DOS, de onde a maioria dos caracteres originalmente veio)

do MSDN :

Um nome de arquivo não pode conter nenhum dos seguintes caracteres:
\ /: *? "<> |

/é um comutador (e também um separador de diretório).
\é um separador de diretório.
:é um designador de unidade.
*e ?são caracteres curinga usados ​​na pesquisa.
"é uma maneira de permitir espaços nos parâmetros.
<e >são redirecionamentos que permitem que a entrada e saída de um programa provenha e vá para algo diferente de tela / teclado.
|é um canal que permite que a saída de um programa seja usada como entrada para o próximo.

SeanC
fonte
1
Para esclarecer esta resposta, esses caracteres especiais podem interferir na análise de uma linha de comando (ou caminho) se eles estiverem em um nome de arquivo. Não há necessidade de delimitar o nome do arquivo de forma alguma (por exemplo, envolvê-lo entre aspas ou espaços), portanto, encontrar um caractere tão especial causaria uma análise incorreta (ou seja, o caractere especial faz parte do nome do arquivo ou de um operador?).
sawdust
1
É, no entanto, discutível que algumas dessas restrições não são mais necessárias devido ao tratamento de nomes de arquivos longos e aspas. \ ? *e "são os únicos realmente necessários na sintaxe atual, pois os outros caracteres são úteis apenas fora das aspas. A exceção é: que só é útil como o segundo caractere, que pode ser ilegal enquanto permitido em outro lugar. Em outras palavras, nenhum arquivo chamado A:A letter's story.txt, mas nenhum problema com um arquivo chamadoSarah: My favorite cat.txt
trlkly
<>"são caracteres curinga reservados. O Windows os utiliza para implementar a semântica complexa do DOS *?.ao traduzir para o NT nativo, que possui semântica simples para *?.. Os seis caracteres curinga são reservados porque o Windows implementa a correspondência curinga no próprio sistema de arquivos, ou seja, diretamente na NtQueryDirectoryFilechamada do sistema, sem mecanismo de escape. No Unix, os curingas são implementados no nível do aplicativo, geralmente por um shell que suporta escapar deles.
Eryk Sun
Observe que :geralmente é reservado em nomes de arquivos, mas não em caminhos de arquivos. É usado para nomes de dispositivos e como delimitador para fluxos de arquivos (por exemplo, "nome do arquivo: streamname: streamtype"). Além disso, alguns sistemas de arquivos como o sistema de arquivos de pastas compartilhadas do VirtualBox permitem :, |e caracteres de controle ASCII (1-31) nos nomes de arquivos, mas são reservados em todos os sistemas de arquivos da Microsoft, exceto no sistema de arquivos de pipe nomeado.
Eryk Sun