Estoy diseñando una tabla de base de datos que contendrá los nombres de los archivos cargados. ¿Cuál es la longitud máxima de un nombre de archivo en NTFS como lo usa Windows XP o Vista?
Estoy diseñando una tabla de base de datos que contendrá los nombres de los archivos cargados. ¿Cuál es la longitud máxima de un nombre de archivo en NTFS como lo usa Windows XP o Vista?
Respuestas:
Los componentes individuales de un nombre de archivo (es decir, cada subdirectorio a lo largo de la ruta y el nombre de archivo final) están limitados a 255 caracteres, y la longitud total de la ruta está limitada a aproximadamente 32,000 caracteres.
Sin embargo, en Windows, no puede exceder el MAX_PATH
valor (259 caracteres para archivos, 248 para carpetas). Verhttp://msdn.microsoft.com/en-us/library/aa365247.aspx para más detalles.
Son 257 caracteres. Para ser precisos: NTFS sí impone una longitud máxima de nombre de archivo de varios miles de caracteres (alrededor de 30'000 algo). Sin embargo, Windows impone una longitud máxima de 260 para Path + Filename. La carpeta drive + ocupa al menos 3 caracteres, por lo que terminas con 257.
Esto es lo que dice la "excepción no controlada" en el marco 4.5 al intentar guardar un archivo con un nombre de archivo largo:
La ruta especificada, el nombre del archivo o ambos son demasiado largos. El nombre de archivo completo debe tener menos de 260 caracteres y el nombre del directorio debe tener menos de 248 caracteres.
199 en Windows XP NTFS, acabo de comprobar.
Esto no es teoría, sino simplemente probarlo en mi computadora portátil. Puede haber efectos atenuantes, pero físicamente no me deja agrandarlo.
¿Hay alguna otra configuración que limite esto, me pregunto? Pruébalo por ti mismo.
w
, lo eliminé y creé una carpeta con el mismo nombre en Windows 7 x64. Ahora la pregunta es cuál es el factor limitante aquí: la versión NTFS, el sistema operativo o el subsistema o la API Win32 en XP.
Según MSDN , tiene 260 caracteres. Incluye "<NUL>"
el carácter nulo de terminación invisible, por lo que la longitud real es 259.
Pero lea el artículo, es un poco más complicado.
\\?\
prefijo requerido en el tiempo de ejecución a una longitud no especificada. La ruta debe permanecer por debajo de 32767 bytes después de esta expansión.
La longitud en NTFS es 255. El NameLength
campo en el $Filename
atributo NTFS es un byte sin desplazamiento; esto produce un rango de 0-255.
El nombre del archivo puede estar en diferentes "espacios de nombres". Hasta ahora hay: POSIX, WIN32, DOS y (WIN32DOS, cuando un nombre de archivo puede ser de forma nativa un nombre de DOS). (Dado que la cadena tiene una longitud, podría contener \ 0 pero eso generaría problemas y no está en los espacios de nombres anteriores).
Por lo tanto, el nombre de un archivo o directorio puede tener hasta 255 caracteres. Al especificar la ruta completa en Windows, debe prefijar la ruta con \\? \ (O usar \\? \ UNC \ server \ share para rutas UNC) para marcar esta ruta como una de longitud extendida (~ 32k caracteres) . Si su ruta es más larga, tendrá que configurar su directorio de trabajo en el camino (ugh - efectos secundarios debido a la configuración de todo el proceso).
255 caracteres.
Estoy agregando esto a la respuesta aprobada anterior.
PARA SER CLARO, la razón por la que la gente cree que tiene 255-260 caracteres es porque eso es todo lo que Windows Explorer admite. Se producirá un error al hacer algo como una copia de archivo en nombres de archivo más largos que eso. Sin embargo, un programa puede leer y escribir nombres de archivo mucho más largos (que es así como llega a longitudes de las que Explorer se queja en primer lugar). La "solución recomendada" de Microsoft en situaciones como esta es abrir el archivo en el programa original que lo escribió y cambiarle el nombre.
Según la nueva documentación del SDK de Windows (8.0) parece que se proporciona un nuevo límite de ruta. Hay un nuevo conjunto de funciones de manejo de ruta y una definición de PATHCCH_MAX_CCH como la siguiente:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
Esta parte de la documentación oficial dice claramente que son 255 caracteres Unicode para NTFS, exFAT y FAT32, y 127 caracteres Unicode o 254 caracteres ASCII para UDF.
Aparte de eso, la longitud máxima del nombre de ruta es siempre de 32.760 caracteres Unicode, con cada componente de ruta no más de 255 caracteres.
WCHAR
elementos. No, no son "caracteres Unicode" (verifique su terminología Unicode: puntos de código, caracteres, etc.).
255 caracteres, aunque la ruta completa no debería ser más larga que eso también. Hay una buena mesa en Wikipedia sobre esto: http://en.wikipedia.org/wiki/Filename .
238! Lo comprobé en Win7 de 32 bits con el siguiente script de murciélago:
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
). ¿Y ahora qué?
En realidad es 256, ver Comparación de funcionalidades del sistema de archivos, límites .
Para repetir una publicación en http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
"Suponiendo que estamos hablando de NTFS y no de FAT32, los" 255 caracteres para ruta + archivo "son una limitación de Explorer, no del sistema de archivos en sí. NTFS admite rutas de hasta 32,000 caracteres Unicode de largo, con cada componente de hasta 255 caracteres.
Explorer, y la API de Windows, lo limitan a 260 caracteres para la ruta, que incluyen letra de unidad, dos puntos, barras inclinadas y un carácter nulo final. Es posible leer una ruta más larga en Windows si la inicia con un
\\
"
Si lees las publicaciones anteriores, verás que hay una quinta cosa de la que puedes estar seguro: ¡Encontrar al menos un usuario obstinado de la computadora!
No puedo crear un archivo con el nombre + período + extensión en WS 2012 Explorer de más de 224 caracteres. ¡No le dispares al mensajero!
En el CMD del mismo servidor no puedo crear un nombre de más de 235 caracteres:
El sistema no puede encontrar la ruta especificada.
El archivo con un nombre de 224 caracteres creado en el Explorador no se puede abrir en Notepad ++; en su lugar, solo aparece un nuevo archivo.
The system cannot find the path specified.
No es lo mismo que The specified path, file name, or both are too long.
. Supongo que tenías un error tipográfico o algo así. Obtiene ese mensaje si intenta crear un archivo en una ruta que no existe o si desea moverse a una dirección que no existe.