8.3 nome de arquivo - 8.3 filename

Um nome de arquivo 8.3 (também chamado de nome de arquivo abreviado ou SFN ) é uma convenção de nome de arquivo usada por versões antigas do DOS e versões do Microsoft Windows anteriores ao Windows 95 e Windows NT 3.5 . Ele também é usado em sistemas operacionais modernos da Microsoft como um nome de arquivo alternativo ao nome de arquivo longo para compatibilidade com programas legados . A convenção de nome de arquivo é limitada pelo sistema de arquivo FAT . Esquemas semelhantes de nomenclatura de arquivos 8.3 também existiam em sistemas operacionais de minicomputadores CP / M , TRS-80 , Atari e alguns Data General e Digital Equipment Corporation anteriores .

Visão geral

8.3 os nomes de arquivo são limitados a no máximo oito caracteres (após qualquer especificador de diretório), seguidos opcionalmente por uma extensão de nome de arquivo consistindo em um ponto . e no máximo três outros caracteres. Para sistemas que suportam apenas nomes de arquivo 8.3, os caracteres em excesso são ignorados. Se um nome de arquivo não tem extensão, um final . não tem significado (ou seja, myfile e myfile. são equivalentes). Além disso, os nomes dos arquivos e diretórios são maiúsculos neste sistema, embora os sistemas que usam o padrão 8.3 não façam distinção entre maiúsculas e minúsculas (tornando CamelCap.tpu o nome equivalente CAMELCAP.TPU ). No entanto, em sistemas operacionais não 8.3 (como quase qualquer sistema operacional moderno) acessando sistemas de arquivos 8.3 (incluindo disquetes formatados em DOS , mas também incluindo alguns cartões de memória modernos e sistemas de arquivos em rede), o sistema subjacente pode alterar nomes de arquivos internamente para preservar entre maiúsculas e minúsculas e evite truncar letras nos nomes, por exemplo, no caso de VFAT .

Nomes de arquivos VFAT e 8.3 gerados por computador

O VFAT , uma variante do FAT com um formato de diretório estendido, foi introduzido no Windows 95 e no Windows NT 3.5. Ele permitia nomes de arquivos longos Unicode (LFNs) combinados com maiúsculas e minúsculas, além de nomes 8.3 clássicos, usando vários registros de entrada de diretório de 32 bytes para nomes de arquivos longos (de forma que apenas um fosse reconhecido pelo software do sistema 8.3 antigo como uma entrada de diretório válida )

Para manter a compatibilidade com versões anteriores com aplicativos legados (em DOS e Windows 3.1 ), em sistemas de arquivos FAT e VFAT, um nome de arquivo 8.3 é gerado automaticamente para cada LFN, através do qual o arquivo ainda pode ser renomeado, excluído ou aberto, embora o nome gerado (por exemplo OVI3KV~N ) pode apresentar pouca semelhança com o original. Em sistemas de arquivos NTFS, a geração de nomes de arquivo 8.3 pode ser desativada. O nome de arquivo 8.3 pode ser obtido usando a função Kernel32.dll GetShortPathName.

Embora não haja nenhum algoritmo obrigatório para criar o nome 8.3 de um LFN, o Windows usa a seguinte convenção:

  1. Se o LFN for 8.3 em maiúsculas, nenhum LFN será armazenado no disco.
    • Exemplo: TEXTFILE.TXT
  2. Se o LFN for 8.3 em maiúsculas e minúsculas, o LFN armazenará o nome em maiúsculas, enquanto o nome 8.3 será uma versão em maiúsculas.
    • Exemplo: TextFile.Txt torna - se TEXTFILE.TXT .
  3. Se o nome do arquivo contiver caracteres não permitidos em um nome 8.3 (incluindo espaço que não foi permitido por convenção, embora não pelas APIs) ou qualquer parte for muito longa, o nome será retirado de caracteres inválidos, como espaços e pontos extras. Se o nome começar com pontos, . os pontos iniciais serão removidos. Outros caracteres como + são alterados para sublinhado _ e as letras são colocadas em maiúsculas. O nome retirado é então truncado nas primeiras 6 letras do nome de base , seguido por um til , seguido por um único dígito , seguido por um ponto . , seguido pelos primeiros 3 caracteres da extensão.
    • Exemplo: TextFile.Mine.txt torna - se TEXTFI~1.TXT (ou TEXTFI~2.TXT , TEXTFI~1.TXT já deveria existir). ver +1.2.text torna-se VER_12~1.TEX . .bashrc.swp torna-se BASHRC~1.SWP
  4. Em todas as versões do NT, incluindo Windows 2000 e posterior, se pelo menos 4 arquivos ou pastas já existirem com a mesma extensão e os primeiros 6 caracteres em seus nomes curtos, o LFN removido é truncado nas primeiras 2 letras do nome de base (ou 1 se o nome de base tem apenas 1 letra), seguido por 4 dígitos hexadecimais derivados de um hash não documentado do nome do arquivo, seguido por um til, seguido por um único dígito, seguido por um ponto . , seguido pelos 3 primeiros caracteres da extensão.
    • Exemplo: TextFile.Mine.txt torna - se TE021F~1.TXT .
  5. No Windows 95, 98 e ME, se mais de 9 arquivos ou pastas com a mesma extensão e primeiros 6 personagens e em seus nomes curtos (de modo que ~1 através de ~9 sufixos não são suficientes para resolver a colisão), o nome é mais truncado para 5 letras, seguidas de um til, seguidas de dois dígitos começando em 10, seguidos de um ponto . e os 3 primeiros caracteres da extensão.
    • Exemplo: TextFile.Mine.txt torna - se TEXTF~10.TXT se TEXTFI~1.TXT através de TEXTFI~9.TXT todos já existem.

NTFS , um sistema de arquivos usado pela família Windows NT , oferece suporte nativo a LFNs, mas os nomes 8.3 ainda estão disponíveis para aplicativos legados. Isso pode ser opcionalmente desabilitado para melhorar o desempenho em situações em que um grande número de arquivos com nomes semelhantes existam na mesma pasta.

O sistema de arquivos ISO 9660 (usado principalmente em discos compactos ) tem limitações semelhantes no Nível 1 mais básico, com a restrição adicional de que os nomes de diretório não podem conter extensões e que alguns caracteres (principalmente hifens ) não são permitidos em nomes de arquivos. O nível 2 permite nomes de arquivos de até 31 caracteres, mais compatíveis com os clássicos AmigaOS e clássicos do Mac OS .

Durante o caso antitruste da Microsoft em 2001 , os nomes MICROS ~ 1 e MICROS ~ 2 foram usados ​​com humor para se referir às empresas que poderiam existir após uma divisão proposta da Microsoft.

Compatibilidade

Essa tecnologia legada é utilizada em uma ampla gama de produtos e dispositivos, como padrão para a troca de informações, como os cartões compact flash usados ​​em câmeras. Os nomes de arquivo longos VFAT LFN introduzidos pelo Windows 95/98 / ME mantêm a compatibilidade. Mas o VFAT LFN usado em sistemas baseados em NT (Windows NT / 2K / XP) usa um shortname 8.3 modificado.

Se um nome de arquivo contiver apenas letras minúsculas ou for uma combinação de um nome de base em minúsculas com uma extensão em maiúsculas ou vice-versa; e não tem caracteres especiais e se encaixa nos limites de 8.3, uma entrada VFAT não é criada no Windows NT e em versões posteriores, como XP. Em vez disso, dois bits no byte 0x0c da entrada do diretório são usados ​​para indicar que o nome do arquivo deve ser considerado total ou parcialmente minúsculo. Especificamente, o bit 4 significa extensão em minúsculas e o nome de base em minúsculas do bit 3 , o que permite combinações como example.TXT ou HELLO.txt mas não Mixed.txt . Poucos outros sistemas operacionais suportam isso. Isso cria um problema de distorção de nome de arquivo de compatibilidade com versões anteriores com versões mais antigas do Windows (95, 98, ME) que vêem nomes de arquivos todos em maiúsculas se esta extensão foi usada e, portanto, pode alterar a capitalização de um arquivo quando ele é transportado, como em uma unidade flash USB. Isso pode causar problemas para sistemas operacionais que não exibem o comportamento de nome de arquivo que não diferencia maiúsculas de minúsculas como o DOS e o Windows. As versões atuais (> 2.6) do Linux reconhecerão esta extensão durante a leitura; o nome abreviado da opção de montagem determina se esse recurso é usado durante a gravação. Para MS-DOS, você pode usar o DOSLFN de Henrik Haftmann.

Tabela de diretório

Uma tabela de diretório é um tipo especial de arquivo que representa um diretório. Cada arquivo ou diretório armazenado dentro dele é representado por uma entrada de 32 bytes na tabela. Cada entrada registra o nome, extensão, atributos ( arquivo , diretório, oculto, somente leitura, sistema e volume), a data e hora de criação, o endereço do primeiro cluster de dados do arquivo / diretório e, finalmente, o tamanho do arquivo / diretório.

Os caracteres legais para nomes de arquivo DOS incluem o seguinte:

  • Letras maiúsculas A - Z
  • Números 0 - 9
  • Espaço (embora os espaços à direita no nome de base ou na extensão sejam considerados preenchimento e não uma parte do nome do arquivo, também os nomes de arquivos com espaços devem ser colocados entre aspas para serem usados ​​em uma linha de comando do DOS, e se o DOS O comando é construído de forma programática, o nome do arquivo deve ser colocado entre aspas duplas ( "" ... "" ) quando visto como uma variável dentro do programa que cria o comando DOS.)
  • ! , # , $ , % , & , ' , ( , ) , - , @ , ^ , _ , ` , { , } , ~
  • Valores 128–255 (embora se os serviços NLS estiverem ativos no DOS, alguns caracteres interpretados como minúsculos são inválidos e indisponíveis)

Isso exclui os seguintes caracteres ASCII :

  • " , * , + , , , / , : , ; , < , = , > , ? , \ , [ , ] , |
    Windows / MS-DOS não tem shell caractere de escape
  • . ( U + 002E . FULL STOP ) nos campos de nome e extensão, exceto em . e .. entradas (veja abaixo)
  • Letras minúsculas a - z , armazenadas como A - Z em FAT12 / FAT16
  • Caracteres de controle de 0 a 31
  • Valor 127 ( DEL )

Os nomes de arquivo DOS estão no conjunto de caracteres OEM . O código 0xE5 como o primeiro byte (veja abaixo) causa problemas quando caracteres extra-ASCII são usados.

As entradas do diretório, tanto na região do diretório raiz quanto nos subdiretórios, têm o seguinte formato:

Byte Offset Comprimento Descrição
0x00 8 Nome do arquivo DOS (preenchido com espaços)

O primeiro byte pode ter os seguintes valores especiais:

0x00 A entrada está disponível e nenhuma entrada subsequente está em uso
0x05 O caractere inicial é na verdade 0xE5
0x2E Entrada de pontos : ou . ou ..
0xE5 A entrada foi apagada anteriormente. Os utilitários de recuperação de arquivo devem substituir esse caractere por um caractere regular como parte do processo de recuperação.
0x08 3 Extensão de arquivo DOS (preenchida com espaços, pode estar vazia)
0x0b 1 Atributos de arquivo

O primeiro byte pode ter os seguintes valores especiais:

Pedaço mascarar Descrição
0 0x01 Somente leitura
1 0x02 Escondido
2 0x04 Sistema
3 0x08 Rótulo de volume
4 0x10 Subdiretório
5 0x20 Arquivo
6 0x40 Dispositivo (apenas para uso interno, nunca encontrado no disco)
7 0x80 Não utilizado

Um valor de atributo de 0x0F é usado para designar uma entrada de nome de arquivo longo.

0x0c 1 Reservado; dois bits são usados ​​pelo NT e versões posteriores para codificar as informações do caso
0x0d 1 Tempo de criação, resolução fina: unidades de 10  ms , valores de 0 a 199.
0x0e 2 Crie tempo. A hora, minuto e segundo são codificados de acordo com o seguinte bitmap:
Bits Descrição
15-11 Horas (0-23)
10–5 Minutos (0-59)
4–0 Segundos / 2 (0-29)

Observe que os segundos são registrados apenas para uma resolução de 2  segundos . A resolução mais fina para a criação de arquivo é encontrada no deslocamento 0x0d.

0x10 2 Criar Data. O ano, mês e dia são codificados de acordo com o seguinte bitmap:
Bits Descrição
15–9 Ano (0 = 1980, 127 = 2107)
8–5 Mês (1 = janeiro, 12 = dezembro)
4–0 Dia (1-31)
0x12 2 Data do último acesso; consulte o deslocamento 0x10 para obter a descrição.
0x14 2 EA-Index (usado por OS / 2 e NT) em FAT12 e FAT16, alto 2 bytes do primeiro número de cluster em FAT32
0x16 2 Hora da última modificação; consulte o deslocamento 0x0e para obter a descrição.
0x18 2 Data da última modificação; consulte o deslocamento 0x10 para obter a descrição.
0x1a 2 Primeiro cluster em FAT12 e FAT16. 2 bytes baixos do primeiro cluster em FAT32.
0x1c 4 Tamanho do arquivo

Trabalhar com nomes de arquivo curtos em um prompt de comando

Às vezes, pode ser desejável converter um nome de arquivo longo em um nome de arquivo curto, por exemplo, ao trabalhar com o prompt de comando. Algumas regras simples podem ser seguidas para obter o nome de arquivo 8.3 correto.

  1. Um nome de arquivo SFN pode ter no máximo 8 caracteres antes do ponto. Se tiver mais do que isso, os primeiros 6 devem ser escritos, então um til ~ como o sétimo caractere e um número (geralmente 1) como o oitavo. O número o distingue de outros arquivos com as mesmas seis primeiras letras e a mesma extensão.
  2. Os pontos são importantes e devem ser usados ​​até mesmo para nomes de pastas (se houver um ponto no nome da pasta). Se houver vários pontos no nome longo do arquivo / diretório, apenas o último será usado. Os pontos anteriores devem ser ignorados. Se houver mais caracteres do que três após o ponto final, apenas os três primeiros serão usados.
  3. Geralmente:
    • Quaisquer espaços nos nomes dos arquivos devem ser ignorados ao converter para SFN.
    • Ignore todos os períodos, exceto o último. Não inclua nenhum outro período, apenas como os espaços. Use o último ponto, se houver, e os próximos caracteres (até 3). Por exemplo, para .manifest, apenas .man seria usado.
    • Vírgulas, colchetes, pontos-e-vírgulas, sinais = e + são alterados para sublinhados.
    • A caixa não é importante, as letras maiúsculas e minúsculas são tratadas igualmente.

Para saber com certeza os nomes SFN ou 8.3 dos arquivos em um diretório

uso: dir /x mostra os nomes curtos, se houver, e os nomes longos.

ou: dir /-n mostra apenas os nomes curtos, no formato de listagem DIR original.

Em sistemas operacionais baseados no Windows NT , os miniaplicativos do prompt de comando ( cmd.exe ) aceitam nomes de arquivos longos com caracteres curinga (ponto de interrogação ? e asterisco * ); nomes de arquivo longos com espaços precisam ser escapados (ou seja, colocados entre aspas simples ou duplas).

Começando com o Windows Vista , os comandos do console e miniaplicativos do PowerShell executam correspondência de padrão limitada , permitindo caracteres curinga no nome do arquivo e cada subdiretório no caminho do arquivo e substituindo silenciosamente a primeira entrada de diretório correspondente (por exemplo, mudará o diretório atual para ). C:\>CD \prog*\inter*C:\Program Files\Internet Explorer\

Veja também

Referências