Estou escrevendo um procedimento de E / S de nome de arquivo na linguagem assembly x86-16. Ele pega oito caracteres (não preciso suportar nomes de arquivos longos) do teclado e os imprime em um campo de entrada de texto na tela.
No momento, estou permitindo números, letras maiúsculas / minúsculas, sublinhados e hífens.
Gostaria de permitir todos os símbolos legais, mas não consigo encontrar uma lista oficial de caracteres proibidos. O senso comum me diz que as barras são ilegais, mas se eu tivesse que adivinhar, diria que o caractere positivo é legal. (editar: não é!)
Já estou ignorando o caractere de ponto, pois meu código lida automaticamente com o acréscimo do ponto e da extensão do arquivo.
filenames
ms-dos
data-validation
Minha vida é um bug.
fonte
fonte
+,;[]
, espaço ea-z
são permitidos no Windows, mas não no DOS. Explorador me dá o erro "Um nome de arquivo não pode conter nenhum dos seguintes caracteres\ / : * ? " < > |
, que é apenas um subconjunto dos caracteres proibidos em DOSRespostas:
Um resumo conciso pode ser encontrado na Wikipedia :
https://en.wikipedia.org/wiki/8.3_filename#Directory_table
E aqui está o que o guia do usuário do MS-DOS 6 disse oficialmente
Isto é do PC-DOS 7:
Guia do Usuário - PC DOS 7
O sistema de arquivos FAT
Se você também estiver interessado no MS-DOS 5.0, aqui está ele .
fonte
CON
,PRN
,AUX
,NUL
,COM1
,COM2
,COM3
,COM4
,COM5
,COM6
,COM7
,COM8
,COM9
,LPT1
,LPT2
,LPT3
,LPT4
,LPT5
,LPT6
,LPT7
,LPT8
, eLPT9
também não são permitidas (ver aqui )A rigor, como programador de aplicativos MS / PC / DR-DOS, você deve solicitar essas informações ao sistema operacional. INT 0x21 com AX = 0x6505 retorna um ponteiro para a chamada
FCHAR
tabela NLS do seu país e página de código. Esta tabela lista um intervalo de caracteres e um conjunto adicional de caracteres que encerram nomes de arquivos.Em teoria, isso varia de acordo com o país e a página de códigos. Mas o fato de não ter sido formalmente transferido para a API do Programa de Controle OS / 2 e o fato de o FreeDOS ter uma tabela em todos os países e páginas de código mostram que na prática é bastante invariável.
Leitura adicional
fonte
Encontrei isso em um manual para o MS-DOS 3.3. Estou executando o 6.22, mas provavelmente ainda se aplica. Eu estava errado sobre o '+' ser permitido.
fonte
Se você apenas deseja validar o nome do arquivo, pode querer usá-lo
INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)
depois de garantir que o nome do arquivo passado não tenha dois pontos ou barra invertida (esses podem ser tratados como letras e diretórios de unidade): a função pega o nome do arquivo proposto e tenta canonizar coloque as letras em maiúsculas e verifique se há caracteres inválidos (também adiciona um nome e caminho da letra da unidade / servidor).No pseudocódigo:
fonte