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?
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?
Respostas:
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.
\
?
*
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
<>"
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 NtQueryDirectoryFile
chamada 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.
:
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.