El misterio de los archivos imposibles en Windows

04/07/2017
Artículo original

Hay algunos archivos que sin difíciles de crear en Windows, pero que en otros sistemas operativos no tienen problema alguno.

Por ejemplo, los archivos que no tienen nombre, solo extensión, es algo que el Explorador de Windows lleva muy mal. ¿Te parece algo raro? Pues prueba a crear el típico archivo .gitignore desde el explorador de archivos, verás que se produce un error:

Intentar crear .gitignore desde el explorador de archivos

Como vemos no nos permite hacerlo porque no le hemos dado nombre, solo extensión.

En los sistemas operativos basados en UNIX, como Linux o Mac OS X, la creación de este tipo de archivos se suele hacer desde un terminal (línea de comandos) usando el comando touch. Pero en Windows no disponemos de dicho comando, aunque es muy fácil de simular su acción a la hora de crear un archivo.

Podemos simplemente abrir una línea de comandos (escribir cmd en la barra de direcciones de la carpeta actual) y escribir:

echo. > .gitignore.txt

echo. escribe una línea vacía en la consola, y el operador > redirige la salida de la consola a un archivo. Es equivalente a crear un archivo vacío con el nombre que le hemos dado:

 

Hasta aquí la cosa no va tan "fina" como sería de esperar, pero tampoco es muy complicado.

Puede que tengas un problema más grave si intentas crear archivos con cierto nombres especiales. Por ejemplo, imagina que quieres crear un archivo con el nombre aux.js para guardar un código auxiliar en una aplicación.

Si lo intentas, tanto desde el explorador de archivos como desde la línea de comandos, verás que todo el tiempo obtienes un error: "El nombre de dispositivo que has especificado no es válido", algo que no pasa con otros como auxliar.txt por ejemplo. Solo con ciertos nombres especiales que enseguida veremos:

Intentado crear un archivo aux.txt

¿Qué diantres pasa aquí?

Nombres de archivos y carpetas especiales "prohibidos"

Lo que ocurre es un ejemplo de libro de herencia tecnológica.

Para entenderlo nos tenemos que remontar nada más y nada menos que al año 1974, año en el que se lanzó el mítico sistema operativo CP/M creado por el visionario de Seattle Gary Kildall. Este sistema operativo no tenía todavía carpetas, solo archivos, con el formato 8.3 (8 letras para el nombre y 3 para la extensión). Para poder intercambiar información entre los programas y los distintos dispositivos se definían unos archivos especiales (o pseudo-archivos) denominados: COM1, COM2, COM3, COM4 (puertos de comunicaciones en serie), LPT1, LPT2 (puertos paralelo), CON (consola, o sea, la pantalla), AUX (dispositivos auxiliares), PRN (impresión) y NUL (descartar la salida).

En 1980 una empresa de Seattle llamada Seattle Computer Products (SCP) creó un sistema operativo llamado 86-DOS que pretendía ser un clon "barato" de CP/M, y que por lo tanto tenía todos esos archivos especiales incluidos. Adicionalmente a lo que ya hacía CP/M, estos archivos y cualquiera con el mismo nombre y cualquier extensión eran equivalentes. Así, por ejemplo, COM1 y COM1.txt eran el mismo archivo. Aquí tienes una explicación de los motivos.

Al año siguiente, 1981, una pequeña empresa de la misma ciudad, poco conocida por entonces, llamada Microsoft compra el sistema operativo 86-DOS a SCP y lo renombra como MS-DOS 1.0, haciendo la que probablemente haya sido la jugada maestra más importante de la historia de la informática. El resto, como suele decirse, es historia (peliculón friki con la historia de Apple y Microsoft hasta los '90).

En 1983 sale la versión 2.0 de MS-DOS, mucho más avanzada y con soporte para carpetas y jerarquías de carpetas. Para mantener la compatibilidad hacia atrás con MS-DOS 1.0, incluye los archivos especiales mencionados, con todas sus posibles extensiones, en todas las carpetas del sistema operativo.

Cuando Microsoft prepara su nueva generación de sistemas operativos llamada NT, incluye nuevamente compatibilidad hacia atrás con MS-DOS y por lo tanto incluye todos esos archivos especiales (ampliados en el caso de los puertos, siendo los COM y los LPT desde el 1 al 9, es decir, COM1, COM2... COM9 y LP1 ... LPT9).

Dado que incluso los Windows más modernos siguen basándose en la arquitectura y la base (por muy mejorada que esté) de Windows NT, todos estos archivos siguen "pululando" por ahí, y nos limitan su uso.

De hecho, estos archivos tienen efectos no deseados más allá del propio sistema de archivos, aunque relacionado con éste. Por ejemplo, si desarrollas para la Web bajo Windows (con ASP.NET u otras tecnologías) si en cualquier punto de una ruta tienes alguno de estos nombres, con o sin extensión, no te lo permitirá.

Cómo podemos crear archivos con nombres especiales

Lo cierto es que en realidad deberíamos evitarlos, pero si queremos crearlos es perfectamente posible, pero hay que saberse el truco.

Para conseguirlo tenemos que usar la línea de comandos y emplear una sintaxis especial para escribir las rutas. Esta sintaxis especial se basa en comenzar las rutas con el prefijo \\?\ y luego escribir la ruta entera. Es decir, no llega con usar ese prefijo y luego el nombre del archivo: hay que poner la ruta completa al mismo si queremos que funcione.

En el siguiente GIF animado vemos cómo intento crear un archivo aux.txt en una carpeta y no me lo permite, y cómo lo creamos desde la línea de comandos usando ese prefijo. Al mismo tiempo, una vez creado, no podremos borrarlo ni desde el explorador de archivos ni desde la línea de comandos (lo cual a veces podría ser útil) y solo se borrará si usamos la sintaxis especial:

Creando y borrando archivos especiales desde la línea de comandos

En resumen

En este artículo hemos visto cómo el tratamiento de archivos en Windows es, digámoslo así, un tanto "sui generis", lo cual nos causa algunos problemas con ciertos nombres.

Hemos visto cómo crear archivos sin nombre pero con extensión (muy utilizados en desarrollo como archivos auxiliares de ciertas herramientas como Git, Jekyll, etc..).

Pero también hemos visto ciertos archivos que están reservados por el sistema y que, en principio, no podemos crear nunca. Hemos conocido las razones históricas para su existencia y cómo la herencia tecnológica hace que cosas diseñadas hace más de 40 años nos sigan impactando hoy en día.

Finalmente hemos conocido un truco para saltarse esa limitación y poder crear y gestionar archivos con nombres reservados sin preocuparnos de las limitaciones que existen en el sistema de archivos.

¡Espero que te haya resultado interesante!