Estou projetando uma tabela de banco de dados que conterá os nomes dos arquivos dos arquivos enviados. Qual é o tamanho máximo de um nome de arquivo no NTFS usado pelo Windows XP ou Vista?
Estou projetando uma tabela de banco de dados que conterá os nomes dos arquivos dos arquivos enviados. Qual é o tamanho máximo de um nome de arquivo no NTFS usado pelo Windows XP ou Vista?
Respostas:
Os componentes individuais de um nome de arquivo (ou seja, cada subdiretório ao longo do caminho e o nome do arquivo final) são limitados a 255 caracteres e o comprimento total do caminho é limitado a aproximadamente 32.000 caracteres.
No entanto, no Windows, você não pode exceder o MAX_PATH
valor (259 caracteres para arquivos, 248 para pastas). Vejohttp://msdn.microsoft.com/en-us/library/aa365247.aspx para obter detalhes completos.
São 257 caracteres. Para ser mais preciso: o próprio NTFS impõe um tamanho máximo de nome de arquivo de vários milhares de caracteres (cerca de 30.000). No entanto, o Windows impõe um comprimento máximo de 260 para o Path + Filename. A pasta drive + ocupa pelo menos 3 caracteres, então você termina com 257.
É o que a "Exceção não tratada" diz na estrutura 4.5 ao tentar salvar um arquivo com um nome de arquivo longo:
O caminho especificado, o nome do arquivo ou ambos são muito longos. O nome completo do arquivo deve ter menos de 260 caracteres e o nome do diretório deve ter menos de 248 caracteres.
199 no Windows XP NTFS, acabei de verificar.
Isso não é teoria, mas apenas tentando no meu laptop. Pode haver efeitos atenuantes, mas fisicamente não vai me deixar aumentar.
Existe alguma outra configuração limitando isso, eu me pergunto? Experimente você mesmo.
w
, excluí-o e criei uma pasta com o mesmo nome no Windows 7 x64. Agora, a pergunta é qual é o fator limitante aqui: a versão NTFS, o sistema operacional ou o subsistema ou a API Win32 no XP?
De acordo com o MSDN , são 260 caracteres. Ele inclui o "<NUL>"
caractere nulo final invisível, portanto o comprimento real é 259.
Mas leia o artigo, é um pouco mais complicado.
\\?\
prefixo necessário no tempo de execução para um comprimento não especificado. O caminho deve permanecer abaixo de 32767 bytes após essa expansão.
O comprimento no NTFS é 255. O NameLength
campo no $Filename
atributo NTFS é um byte sem deslocamento; isso gera um intervalo de 0 a 255.
O próprio nome do arquivo pode estar em diferentes "namespaces". Até o momento, existem: POSIX, WIN32, DOS e (WIN32DOS - quando um nome de arquivo pode ser nativamente um nome de DOS). (Como a cadeia tem um comprimento, ela pode conter \ 0, mas isso traria problemas e não está nos espaços para nome acima.)
Assim, o nome de um arquivo ou diretório pode ter até 255 caracteres. Ao especificar o caminho completo no Windows, você precisa prefixar o caminho com \\? \ (Ou usar \\? \ UNC \ server \ share para caminhos UNC) para marcar esse caminho como um comprimento estendido (~ 32k caracteres) . Se o seu caminho for mais longo, você terá que definir seu diretório de trabalho ao longo do caminho (ugh - efeitos colaterais devido à configuração do processo).
255 caracteres.
Estou adicionando isso à resposta aprovada acima.
PARA SER CLARO, a razão pela qual as pessoas acreditam que sejam 255-260 caracteres é porque isso é tudo o que o Windows Explorer suporta. Será um erro fazer algo como uma cópia de arquivo em nomes de arquivos mais longos do que isso. No entanto, um programa pode ler e gravar nomes de arquivos muito mais longos (que é a maneira pela qual você obtém informações que o Explorer reclama em primeiro lugar). A "correção recomendada" da Microsoft em situações como essa é abrir o arquivo no programa original que o escreveu e renomeá-lo.
De acordo com a nova documentação do Windows SDK (8.0), parece que um novo limite de caminho é fornecido. Há um novo conjunto de funções de manipulação de caminho e uma definição de PATHCCH_MAX_CCH da seguinte maneira:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
Esta parte da documentação oficial diz claramente que são 255 caracteres Unicode para NTFS, exFAT e FAT32 e 127 caracteres Unicode ou 254 caracteres ASCII para UDF.
Além disso, o comprimento máximo do nome do caminho é sempre 32.760 caracteres Unicode, com cada componente do caminho com no máximo 255 caracteres.
WCHAR
elementos. Não, não são "caracteres Unicode" (verifique sua terminologia Unicode: pontos de código, caracteres etc ...!).
255 caracteres, embora o caminho completo também não deva ser mais longo. Há uma boa tabela na Wikipedia sobre isso: http://en.wikipedia.org/wiki/Filename .
238! Eu verifiquei no Win7 32 bits com o seguinte script bat:
set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF
w
). E agora?
Na verdade, é 256, consulte Comparação de funcionalidades do sistema de arquivos, Limites .
Para repetir uma postagem em http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
"Supondo que estamos falando de NTFS e não de FAT32, os" 255 caracteres para o caminho + arquivo "são uma limitação do Explorer, não do próprio sistema de arquivos. O NTFS suporta caminhos com até 32.000 caracteres Unicode, com cada componente com 255 caracteres.
O Explorer - e a API do Windows - limita você a 260 caracteres para o caminho, que incluem letra da unidade, dois pontos, barras e um caractere nulo final. É possível ler um caminho mais longo no Windows se você o iniciar com um
\\
"
Se você ler as postagens acima, verá uma quinta coisa de que pode ter certeza: Encontrar pelo menos um usuário obstinado de computador!
Não consigo criar um arquivo com o nome + ponto + extnião no WS 2012 Explorer com mais de 224 caracteres. Não atire no mensageiro!
No CMD do mesmo servidor, não consigo criar um nome com mais de 235 caracteres:
O sistema não consegue encontrar o caminho especificado.
O arquivo com um nome de 224 caracteres criado no Explorer não pode ser aberto no Notepad ++ - ele apenas cria um novo arquivo.
The system cannot find the path specified.
não é o mesmo que The specified path, file name, or both are too long.
. Eu acho que você teve um erro de digitação ou algo assim. Você recebe essa mensagem se tentar criar um arquivo em um caminho que não existe ou se desejar mover para uma direção que não existe.