Pergunta

Eu não estou perguntando sobre regras sintáticas gerais de nomes de arquivo. Quero dizer gotchas que saltam do nada e mordê-lo. Por exemplo, tentar nomear um arquivo "COM " no Windows?

Foi útil?

Solução

De: http://www.grouplogic.com /knowledge/index.cfm/fuseaction/view_Info/docID/111 .

Os seguintes caracteres são inválidos como nomes de arquivos ou pastas no Windows usando NTFS:. / ? < > \ : * | " e qualquer personagem pode escrever com a tecla Ctrl

Além do acima caracteres ilegais do ^ acento circunflexo também não é permitido sob sistemas operacionais Windows utilizando o sistema de arquivos FAT.

No Windows usando o arquivo de sistema de arquivos FAT e nomes de pastas podem ter até 255 caracteres.

No Windows usando o arquivo de sistema de arquivos NTFS e nomes de pastas podem ter até 256 caracteres.

sob a janela de comprimento de um caminho completo em ambos os sistemas é de 260 caracteres.

Além desses personagens, as seguintes convenções também são ilegais:

  • Colocar um espaço no final do nome
  • Colocar um ponto final no fim do nome

Os seguintes nomes de arquivo também estão reservados no Windows:

  • aux,
  • com1,
  • com2,
  • ...
  • com9,
  • lpt1,
  • lpt2,
  • ...
  • lpt9,
  • con,
  • nul,
  • prn

Outras dicas

A inscrição completa de nomes de arquivos legais e ilegais no Windows: http://msdn.microsoft.com/en-us/library/aa365247.aspx

Como já foi dito, os nomes de dispositivos como COM1 não são possíveis como nomes de arquivos no Windows, porque eles são dispositivos reservados.

No entanto, existe um método de fuga para criar e acessar arquivos com esses nomes reservados, por exemplo, este comando irá redirecionar a saída do comando ver em um arquivo chamado COM1:

ver > "\\?\C:\Users\username\COM1"

Agora você terá um arquivo chamado COM1 que 99% dos programas não será capaz de abrir, e provavelmente irá congelar se você tentar o acesso.

Aqui está a Microsoft artigo que explica como funciona este "espaço de nome de arquivo". Basicamente, ele informa ao Windows para não fazer qualquer processamento corda no texto e passá-lo direto para o sistema de arquivos. Este truque também pode ser usado para trabalhar com caminhos mais de 260 caracteres.

A Unix pegadinha complicado quando você não sabe:

Os arquivos que começam com - ou - são legais, mas uma dor na bunda para trabalhar, como muitas ferramentas de linha de comando acho que você está fornecendo opções para eles.

Muitas dessas ferramentas têm um marcador especial "-" para sinalizar o fim das opções:

gzip -9vf -- -mydashedfilename

O boost :: filesystem Guia de Portabilidade tem um monte de boas informações.

Bem, para MSDOS / Windows, NUL, PRN, LPT e CON. Eles até mesmo causar problemas se usado com uma extensão: "NUL.TXT"

A menos que você está diretórios especiais tocantes, os únicos nomes ilegais em Linux são '.' e '..'. Qualquer outro nome é possível, embora acessando alguns deles a partir do shell requer o uso de sequências de escape.

EDIT: Como Vinko Vrsalovic disse, arquivos começando com '-' e '--' são uma dor a partir do shell, uma vez que essas sequências de caracteres são interpretados pela aplicação, não o shell

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top