¿Por qué no puedes usar caracteres especiales en un nombre de archivo, como “?” O “;”?

17

Cuando intento guardar un archivo, si utilizo caracteres especiales en el nombre (como dos puntos, un signo de interrogación o un signo de exclamación) en Windows recibo un mensaje que dice que el nombre del archivo no es válido.

¿Porqué es eso?

usuario284989
fuente
¿En qué programa está tratando de guardar un archivo, y está el personaje ofensor en el archivo o (como parece) en el nombre del archivo?
Jukka K. Korpela

Respuestas:

22

Hay varios caracteres que tienen un significado especial para Windows (y para DOS, de donde provienen originalmente la mayoría de los caracteres)

de MSDN :

Un nombre de archivo no puede contener ninguno de los siguientes caracteres:
\ /: *? "<> |

/es un conmutador (y también un separador de directorio).
\es un separador de directorio
:es un designador de unidad.
*y ?son comodines utilizados en la búsqueda.
"es una forma de permitir espacios en los parámetros.
<y >son redireccionamientos que permiten que la entrada y salida de un programa provenga y vaya a algo que no sea pantalla / teclado.
|es una tubería que permite utilizar la salida de un programa como entrada para el siguiente.

SeanC
fuente
1
Para aclarar esta respuesta, estos caracteres especiales podrían interferir con el análisis de una línea de comando (o ruta) si estuvieran en un nombre de archivo. No hay ningún requisito para delimitar el nombre de archivo de ninguna manera (por ejemplo, rodearlo con comillas o espacios), por lo que encontrar un carácter tan especial causaría un análisis incorrecto (es decir, ¿es la parte de carácter especial del nombre de archivo o un operador?).
aserrín
1
Sin embargo, es discutible que algunas de estas restricciones ya no sean necesarias debido al manejo de nombres de archivo largos y comillas. \ ? *y "son los únicos realmente necesarios en la sintaxis actual, ya que los otros caracteres solo son útiles fuera de las comillas. La excepción es: que solo es útil como el segundo personaje, que podría prohibirse al permitirlo en otro lugar. En otras palabras, no hay archivo llamado A:A letter's story.txt, pero no hay problema con un archivo llamadoSarah: My favorite cat.txt
trlyly
<>"son caracteres comodín reservados. Windows los usa para implementar la semántica compleja para DOS *?.cuando se traduce a NT nativo, que tiene una semántica simple para *?.. Los seis caracteres comodín están reservados porque Windows implementa la coincidencia de comodines en el propio sistema de archivos, es decir, directamente en la NtQueryDirectoryFilellamada del sistema, sin mecanismo de escape. En Unix, los comodines se implementan en el nivel de la aplicación, generalmente mediante un shell que permite escapar de ellos.
Eryk dom
Tenga en cuenta que :generalmente está reservado en los nombres de archivo, pero no en las rutas de los archivos. Se utiliza para nombres de dispositivos y como delimitador para secuencias de archivos (por ejemplo, "nombre de archivo: nombre de secuencia: tipo de secuencia"). Además, algunos sistemas de archivos como el sistema de archivos de carpetas compartidas VirtualBox permiten :, |y los caracteres de control ASCII (1-31) en los nombres de archivos, pero están reservados en todos los sistemas de archivos de Microsoft, excepto en el sistema de archivos de canalizaciones con nombre.
Eryk dom