Un nombre de archivo o nombre de archivo es un nombre que se utiliza para identificar de forma única un archivo de computadora en un sistema de archivos . Los diferentes sistemas de archivos imponen diferentes restricciones sobre la longitud de los nombres de archivo.
Un nombre de archivo puede incluir (dependiendo del sistema de archivos):
.txt
para texto simple ,.pdf
para formato de documento portátil ,.dat
para datos binarios no especificados, etc.)Los componentes necesarios para que las utilidades y aplicaciones identifiquen un archivo varían según los sistemas operativos, al igual que la sintaxis y el formato de un nombre de archivo válido.
Los caracteres permitidos en los nombres de archivo dependen del sistema de archivos. La mayoría de los sistemas de archivos permiten las letras A–Z y los dígitos 0–9; muchos sistemas de archivos admiten caracteres adicionales, como las letras a–z, caracteres especiales y otros caracteres imprimibles, como letras acentuadas, símbolos en alfabetos no romanos y símbolos en escrituras no alfabéticas. Algunos sistemas de archivos permiten que incluso caracteres no imprimibles, como Bell , Null , Return y Linefeed , formen parte de un nombre de archivo, [1] aunque la mayoría de las utilidades no los manejan bien.
Los nombres de archivo pueden incluir cosas como un número de revisión o generación del archivo, un número de secuencia numérica (ampliamente utilizado por las cámaras digitales a través del estándar DCF ), una fecha y hora (ampliamente utilizado por el software de la cámara de los teléfonos inteligentes y para capturas de pantalla ), o un comentario como el nombre de un tema o una ubicación o cualquier otro texto para ayudar a identificar el archivo.
Algunas personas utilizan el término nombre de archivo para referirse a una especificación completa de dispositivo, subdirectorios y nombre de archivo, como C:\Program Files\Microsoft Games\Chess\Chess.exe de Windows . El nombre de archivo en este caso es Chess.exe . Algunas utilidades tienen configuraciones para suprimir la extensión, como ocurre con MS Windows Explorer. [ no verificado en el cuerpo ]
Durante la década de 1970, algunas mainframes y minicomputadoras tenían sistemas operativos en los que los archivos del sistema estaban identificados por un nombre de usuario o un número de cuenta.
Por ejemplo, en los sistemas operativos TOPS-10 y RSTS/E de Digital Equipment Corporation , los archivos se identificaban mediante
En los sistemas operativos OS/VS1 , MVS y OS/390 de IBM , un nombre de archivo podía tener hasta 44 caracteres, que consistían en letras mayúsculas, dígitos y un punto. Un nombre de archivo debe comenzar con una letra o un número, debe aparecer un punto al menos una vez cada 8 caracteres, no pueden aparecer dos puntos consecutivos en el nombre y debe terminar con una letra o un dígito. [2] Por convención, las letras y los números antes del primer punto eran el número de cuenta del propietario o del proyecto al que pertenecía, pero no había ningún requisito para utilizar esta convención. [3]
En el sistema MUSIC/SP de la Universidad McGill , los nombres de archivo constaban de
El sistema operativo Univac VS/9 tenía nombres de archivo que consistían en
En 1985, el RFC 959 definió oficialmente una ruta como la cadena de caracteres que un usuario debe ingresar en un sistema de archivos para identificar un archivo. [4]
En las primeras computadoras personales que utilizaban el sistema operativo CP/M , los nombres de archivo siempre tenían 11 caracteres. Esto se conocía como el nombre de archivo 8.3 con un máximo de 8 bytes y una extensión de 3 bytes. Las utilidades y aplicaciones permitían a los usuarios especificar nombres de archivo sin espacios finales e incluir un punto antes de la extensión. El punto no se almacenaba realmente en el directorio. El uso de caracteres de solo 7 bits permitía incluir varios atributos de archivo en el nombre de archivo real mediante el uso del bit de orden superior; estos atributos incluían Readonly, Archive y System. [5] Con el tiempo, esto resultó demasiado restrictivo y aumentó la cantidad de caracteres permitidos. Los bits de atributo se trasladaron a un bloque especial del archivo que incluía información adicional. [ cita requerida ]
El sistema de archivos FAT ( File Allocation Table ) original , utilizado por Standalone Disk BASIC-80 , tenía un nombre de archivo 6.3, con un máximo de 6 bytes en el nombre y un máximo de 3 bytes en la extensión. Los sistemas de archivos FAT12 y FAT16 en IBM PC DOS / MS-DOS y Microsoft Windows antes de Windows 95 usaban la misma convención 8.3 que el sistema de archivos CP/M. Los sistemas de archivos FAT admitían caracteres de 8 bits, lo que les permitía admitir caracteres no ASCII en los nombres de archivo y almacenaban los atributos por separado del nombre de archivo.
Alrededor de 1995, VFAT , una extensión del sistema de archivos FAT de MS-DOS, se introdujo en Windows 95 y Windows NT . Permitía nombres de archivo largos (LFN) con mayúsculas y minúsculas, utilizando caracteres Unicode , además de los nombres clásicos "8.3".
Los programas y dispositivos pueden asignar automáticamente nombres a los archivos, como un contador numérico (por ejemplo IMG_0001.JPG
) o una marca de tiempo con la fecha y hora actuales.
La ventaja de un nombre de archivo con marca de tiempo es que facilita la búsqueda de archivos por fecha, dado que los administradores de archivos suelen tener la función de búsqueda de archivos por nombre. Además, los archivos de diferentes dispositivos se pueden fusionar en una carpeta sin conflictos de nombres de archivos.
Por otro lado, los nombres de archivo numerados no requieren que el dispositivo tenga un reloj interno configurado correctamente. Por ejemplo, algunos usuarios de cámaras digitales podrían no molestarse en configurar el reloj de su cámara. Los dispositivos conectados a Internet, como los teléfonos inteligentes, pueden sincronizar su reloj desde un servidor NTP.
Una referencia absoluta incluye todos los niveles de directorio. En algunos sistemas, una referencia de nombre de archivo que no incluye la ruta completa del directorio tiene como valor predeterminado el directorio de trabajo actual . Esta es una referencia relativa. Una ventaja de utilizar una referencia relativa en archivos de configuración de programas o scripts es que diferentes instancias del script o programa pueden utilizar archivos diferentes.
Esto crea una ruta absoluta o relativa compuesta de una secuencia de nombres de archivos.
Los sistemas de archivos tipo Unix permiten que un archivo tenga más de un nombre; en los sistemas de archivos tradicionales de estilo Unix, los nombres son enlaces duros al inodo del archivo o equivalente. Windows admite enlaces duros en sistemas de archivos NTFS y proporciona el comando fsutil
en Windows XP y mklink
en versiones posteriores para crearlos. [6] [7] Los enlaces duros son diferentes de los accesos directos de Windows, los alias clásicos de Mac OS/macOS o los enlaces simbólicos . La introducción de LFN con VFAT permitió alias de nombre de archivo. Por ejemplo, longfi~1.???
con un máximo de ocho más tres caracteres, se creó un alias de nombre de archivo de " long file name.???
" como una forma de cumplir con las limitaciones de 8.3 para programas más antiguos.
Esta propiedad fue utilizada por el algoritmo del comando de movimiento que primero crea un segundo nombre de archivo y luego solo elimina el primer nombre de archivo.
Otros sistemas de archivos, por diseño, proporcionan sólo un nombre de archivo por archivo, lo que garantiza que la alteración de un nombre de archivo no altere el del otro.
Algunos sistemas de archivos restringen la longitud de los nombres de archivo. En algunos casos, estas longitudes se aplican al nombre de archivo completo, como en IBM z/OS 44 caracteres . [2] En otros casos, los límites de longitud pueden aplicarse a partes particulares del nombre de archivo, como el nombre de un archivo en un directorio o un nombre de directorio. Por ejemplo, 9 (p. ej., FAT de 8 bits en Standalone Disk BASIC ), 11 (p. ej. , FAT12 , FAT16 , FAT32 en DOS), 14 (p. ej., principios de Unix), 21 ( Human68K ), 31, 30 (p. ej., Apple DOS 3.2 y 3.3), 15 (p. ej. , Apple ProDOS ), 44 (p. ej., IBM S/370), [2] o 255 (p. ej., principios de Berkeley Unix) caracteres o bytes. Los límites de longitud a menudo son el resultado de asignar un espacio fijo en un sistema de archivos para almacenar componentes de nombres, por lo que aumentar los límites a menudo requiere un cambio incompatible, además de reservar más espacio.
Un problema particular con los sistemas de archivos que almacenan información en directorios anidados es que puede ser posible crear un archivo con una ruta de acceso completa que exceda los límites de implementación, ya que la verificación de longitud puede aplicarse solo a partes individuales del nombre en lugar de al nombre completo. Muchas aplicaciones de Windows están limitadas a un MAX_PATH
valor de 260, pero los nombres de archivos de Windows pueden superar fácilmente este límite. [8] A partir de Windows 10, versión 1607 , se han eliminado las limitaciones de MAX_PATH. [9]
Los nombres de archivo en algunos sistemas de archivos, como FAT y los niveles ODS-1 y ODS-2 de Files-11 , se componen de dos partes: un nombre base o raíz y una extensión o sufijo que utilizan algunas aplicaciones para indicar el tipo de archivo . Algunos otros sistemas de archivos, como los sistemas de archivos Unix , VFAT y NTFS , tratan un nombre de archivo como una sola cadena; una convención que se utiliza a menudo en esos sistemas de archivos es tratar los caracteres que siguen al último punto del nombre de archivo, en un nombre de archivo que contiene puntos, como la parte de extensión del nombre de archivo.
Los archivos de salida múltiples creados por una aplicación pueden usar el mismo nombre base y varias extensiones. Por ejemplo, un compilador Fortran puede usar la extensión FOR
para el archivo de entrada de origen, OBJ
para la salida del objeto y LST
para el listado. Aunque existen algunas extensiones comunes, son arbitrarias y una aplicación diferente puede usar REL
y RPT
. Las extensiones se han restringido, al menos históricamente en algunos sistemas, a una longitud de 3 caracteres, pero en general pueden tener cualquier longitud, p. ej., html
.
No existe un estándar de codificación general para los nombres de archivos.
Los nombres de archivo deben intercambiarse entre entornos de software para la transferencia de archivos en red, el almacenamiento de sistemas de archivos, el software de copia de seguridad y sincronización de archivos, la gestión de la configuración, la compresión y el archivado de datos, etc. Por lo tanto, es muy importante no perder la información de los nombres de archivo entre aplicaciones. Esto llevó a la adopción generalizada de Unicode como estándar para codificar nombres de archivos, aunque el software heredado podría no ser compatible con Unicode.
Tradicionalmente, los nombres de archivo permitían cualquier carácter en sus nombres de archivo siempre que fueran seguros para el sistema de archivos. [10] Aunque esto permitía el uso de cualquier codificación y, por lo tanto, permitía la representación de cualquier texto local en cualquier sistema local, causaba muchos problemas de interoperabilidad.
Un nombre de archivo podía almacenarse utilizando diferentes cadenas de bytes en distintos sistemas dentro de un mismo país, como si uno utilizara la codificación JIS Shift japonesa y otro la codificación EUC japonesa . La conversión no era posible ya que la mayoría de los sistemas no exponían una descripción de la codificación utilizada para un nombre de archivo como parte de la información extendida del archivo. Esto obligaba a realizar una costosa adivinación de la codificación del nombre de archivo con cada acceso al archivo. [10]
Una solución fue adoptar Unicode como codificación para los nombres de archivos.
Sin embargo, en el sistema operativo Mac clásico, la codificación del nombre de archivo se almacenaba con los atributos del nombre de archivo. [10]
El estándar Unicode resuelve el problema de determinación de la codificación.
No obstante, persisten algunos problemas de interoperabilidad limitados, como la normalización (equivalencia) o la versión Unicode en uso. Por ejemplo, UDF está limitada a Unicode 2.0; el sistema de archivos HFS+ de macOS aplica la normalización Unicode NFD y opcionalmente distingue entre mayúsculas y minúsculas (no distingue entre mayúsculas y minúsculas de forma predeterminada). La longitud máxima del nombre de archivo no es estándar y puede depender del tamaño de la unidad de código. Aunque es un problema grave, en la mayoría de los casos es limitado. [10]
En Linux, esto significa que el nombre del archivo no es suficiente para abrirlo: además, se necesita la representación exacta en bytes del nombre del archivo en el dispositivo de almacenamiento. Esto se puede resolver a nivel de aplicación, con algunas llamadas de normalización complicadas. [11]
El problema de la equivalencia Unicode se conoce como "colisión de nombres normalizados". Una solución es la Non-normalizing Unicode Composition Awareness (Conciencia de composición Unicode no normalizadora ) que se utiliza en las comunidades técnicas de Subversion y Apache. [12] Esta solución no normaliza las rutas en el repositorio. Las rutas solo se normalizan con el fin de realizar comparaciones. No obstante, algunas comunidades han patentado esta estrategia, prohibiendo su uso por parte de otras comunidades. [ Se necesita aclaración ]
Para limitar los problemas de interoperabilidad, algunas ideas descritas por Sun son:
Estas consideraciones crean una limitación que no permite un cambio a una codificación futura diferente de UTF-8.
Un problema fue la migración a Unicode. Para ello, varias empresas de software proporcionaron software para migrar los nombres de archivo a la nueva codificación Unicode.
Mac OS X 10.3 marcó la adopción por parte de Apple de la descomposición de caracteres Unicode 3.2, reemplazando la descomposición Unicode 2.1 utilizada anteriormente. Este cambio causó problemas a los desarrolladores que escribían software para Mac OS X. [15]
Dentro de un mismo directorio, los nombres de archivo deben ser únicos. Dado que la sintaxis de los nombres de archivo también se aplica a los directorios, no es posible crear un archivo y entradas de directorio con el mismo nombre en un mismo directorio. Varios archivos en distintos directorios pueden tener el mismo nombre.
El enfoque de unicidad puede diferir tanto en la distinción entre mayúsculas y minúsculas como en la forma de normalización Unicode , como NFC o NFD. Esto significa que se pueden crear dos archivos separados con el mismo nombre de archivo de texto y una implementación de bytes diferente del nombre de archivo, como L"\x00C0.txt" (UTF-16, NFC) (A mayúscula latina con mayúscula) y L"\x0041\x0300.txt" (UTF-16, NFD) (A mayúscula latina, combinación de mayúsculas). [16]
Algunos sistemas de archivos, como FAT antes de la introducción de VFAT , almacenan los nombres de archivo en mayúsculas sin importar el uso de mayúsculas y minúsculas para crearlos. Por ejemplo, un archivo creado con el nombre "MyName.Txt" o "myname.txt" se almacenaría con el nombre de archivo "MYNAME.TXT" (VFAT conserva el uso de mayúsculas y minúsculas). Se puede utilizar cualquier variación de mayúsculas y minúsculas para hacer referencia al mismo archivo. Este tipo de sistemas de archivos se denominan insensibles a mayúsculas y minúsculas y no conservan las mayúsculas y minúsculas . Algunos sistemas de archivos prohíben por completo el uso de letras minúsculas en los nombres de archivo.
Algunos sistemas de archivos almacenan los nombres de los archivos en la forma en que fueron creados originalmente; estos se conocen como sistemas que conservan las mayúsculas y minúsculas . Un sistema de archivos de este tipo puede distinguir entre mayúsculas y minúsculas o no distinguir entre mayúsculas y minúsculas . Si distingue entre mayúsculas y minúsculas, entonces "MyName.Txt" y "myname.txt" pueden hacer referencia a dos archivos diferentes en el mismo directorio, y cada archivo debe ser referenciado por la capitalización exacta con la que se nombra. Por otro lado, en un sistema de archivos que preserva las mayúsculas y minúsculas, solo uno de "MyName.Txt", "myname.txt" y "Myname.TXT" puede ser el nombre de un archivo en un directorio determinado en un momento dado, y un archivo con uno de estos nombres puede ser referenciado por cualquier capitalización del nombre.
Desde sus inicios, los sistemas de archivos en Unix y sus sistemas derivados distinguían entre mayúsculas y minúsculas y las conservaban. Sin embargo, no todos los sistemas de archivos en esos sistemas distinguen entre mayúsculas y minúsculas; de forma predeterminada, HFS+ y APFS en macOS no distinguen entre mayúsculas y minúsculas, pero las conservan, y los servidores SMB suelen proporcionar un comportamiento que no distingue entre mayúsculas y minúsculas (incluso cuando el sistema de archivos subyacente distingue entre mayúsculas y minúsculas, por ejemplo, Samba en la mayoría de los sistemas similares a Unix), y los sistemas de archivos de cliente SMB proporcionan un comportamiento que no distingue entre mayúsculas y minúsculas. La distinción entre mayúsculas y minúsculas del sistema de archivos es un desafío considerable para software como Samba y Wine , que deben interoperar de manera eficiente tanto con sistemas que tratan los archivos en mayúsculas y minúsculas como diferentes y con sistemas que los tratan de la misma manera. [17]
Los sistemas de archivos no siempre han proporcionado el mismo conjunto de caracteres para componer un nombre de archivo. Antes de que Unicode se convirtiera en un estándar de facto, los sistemas de archivos utilizaban principalmente un conjunto de caracteres dependiente de la configuración regional. Por el contrario, algunos sistemas nuevos permiten que un nombre de archivo se componga de casi cualquier carácter del repertorio Unicode, e incluso de algunas secuencias de bytes que no son Unicode. El sistema de archivos, el sistema operativo, la aplicación o los requisitos de interoperabilidad con otros sistemas pueden imponer limitaciones.
Muchas utilidades del sistema de archivos prohíben que aparezcan caracteres de control en los nombres de archivo. En los sistemas de archivos tipo Unix, los caracteres de controlEl carácter nulo [18] y el separador de ruta /
están prohibidos.
Las utilidades del sistema de archivos y las convenciones de nomenclatura de varios sistemas prohíben que aparezcan determinados caracteres en los nombres de archivos o los hacen problemáticos: [8] Salvo que se indique lo contrario, los símbolos de la columna Carácter , " y < por ejemplo, no se pueden utilizar en los nombres de archivos de Windows.
Nota 1: Si bien están permitidos en los nombres de archivos y carpetas de Unix, la mayoría de los shells de Unix requieren que caracteres específicos como espacios, <, >, |, \ y, a veces, :, (, ), &, ;, #, así como comodines como ? y *, se entrecomillen o escapen :
five\ and\ six\<seven
(ejemplo de escape)'five and six<seven'
o"five and six<seven"
(ejemplos de comillas)
El carácter å ( 0xE5
) no estaba permitido como primera letra de un nombre de archivo en 86-DOS y MS-DOS/PC DOS 1.x-2.x, pero se puede utilizar en versiones posteriores.
En las utilidades de Windows, el espacio y el punto no están permitidos como caracteres finales de un nombre de archivo. [19] El punto está permitido como primer carácter, pero algunas aplicaciones de Windows, como el Explorador de Windows , prohíben la creación o el cambio de nombre de dichos archivos (a pesar de que esta convención se utiliza en sistemas tipo Unix para describir archivos y directorios ocultos). Las soluciones alternativas incluyen agregar un punto al cambiar el nombre del archivo (que luego se elimina automáticamente después), usar administradores de archivos alternativos , crear el archivo usando la línea de comandos o guardar un archivo con el nombre de archivo deseado desde una aplicación. [20]
Algunos sistemas de archivos de un sistema operativo determinado (especialmente los sistemas de archivos implementados originalmente en otros sistemas operativos) y aplicaciones particulares de ese sistema operativo pueden aplicar restricciones e interpretaciones adicionales. Consulte la comparación de sistemas de archivos para obtener más detalles sobre las restricciones.
En sistemas tipo Unix, DOS y Windows, los nombres de archivo "." y ".." tienen significados especiales (directorio actual y directorio padre respectivamente). Windows 95/98/ME también utiliza nombres como "...", "...." y así sucesivamente para indicar directorios abuelos o bisabuelos. [21] Todas las versiones de Windows prohíben la creación de nombres de archivo que consten únicamente de puntos, aunque los nombres que constan de tres puntos ("...") o más son legales en Unix.
Además, en las utilidades de Windows y DOS, algunas palabras también están reservadas y no se pueden usar como nombres de archivo. [20] Por ejemplo, archivos de dispositivo DOS : [22]
CON, CONIN$, CONOUT$, PRN, AUX, RELOJ$, NULCOM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 [8] LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 [8] LST (solo en 86-DOS y DOS 1.xx)KEYBD$, SCREEN$ (sólo en multitarea MS-DOS 4.0 )$IDLE$ (solo en DOS concurrente 386 , DOS multiusuario y DR DOS 5.0 y superiores)CONFIG$ (sólo en MS-DOS 7.0-8.0)
Los sistemas que tienen estas restricciones provocan incompatibilidades con otros sistemas de archivos. Por ejemplo, Windows no podrá manejar estos nombres de archivo UNIX legales, o generará informes de error para ellos: aux.c, [23] q"uote"s.txt o NUL.txt.
Los nombres de archivos NTFS que se utilizan internamente incluyen:
$Mft, $MftMirr, $ArchivoRegistro, $Volumen, $AttrDef, $Mapa de bits, $Arranque, $BadClus, $Secure,$Upcase, $Extend, $Quota, $ObjId y $Reparse