Windows: ¿Binario o texto? La verdad revelada

Fuentes: How do I inform Windows that I'm writing a binary file? - The Old New Thing

A menudo nos preguntamos cómo indicar a Windows que estamos trabajando con un archivo binario o de texto. La respuesta, sorprendentemente, es que Windows no 'sabe' la diferencia. Desde la perspectiva del sistema operativo, un archivo es simplemente una secuencia de bytes, y la interpretación de esos bytes (si representan texto o datos binarios) recae en la aplicación o biblioteca que los está manejando.

Imagina que estás escribiendo un programa que necesita crear un archivo de texto. Si no especificas explícitamente que quieres que se trate como un archivo de texto, Windows asumirá que es binario. Esto significa que cualquier conversión de formato (como la adición de retornos de carro antes de saltos de línea, o la conversión de ASCII a Unicode) no se realizará automáticamente. Es tu responsabilidad, como programador, implementar estas conversiones si son necesarias. Esto se logra típicamente a través de bibliotecas de nivel superior, como la biblioteca de ejecución en C (C runtime). Al abrir un archivo en modo 'w' (write text), le estás indicando a la biblioteca de ejecución que realice las conversiones necesarias antes de pasar los datos a Windows. El modo 'wb' (write binary) indica lo contrario: que los datos deben pasarse a Windows tal cual.

Una pregunta común es si existe una forma de simular el comportamiento de un antiguo ioctl de MS-DOS (Interrupt 2821h) que permitía establecer el modo 'raw' (binario) para dispositivos. Sin embargo, este ioctl solo funciona con dispositivos de carácter (como terminales), no con archivos de disco. Intentar usarlo con un archivo de disco resulta en un error. Windows tiene mecanismos equivalentes para controlar el comportamiento de la consola, como la función SetConsoleMode, que es análoga al comando stty en sistemas Unix.

En resumen, si necesitas realizar transformaciones de contenido en un archivo, debes hacerlo tú mismo o delegar esa tarea a una biblioteca de nivel superior. Windows se limita a proporcionar una interfaz para leer y escribir bytes, dejando la interpretación y el formato a cargo de las aplicaciones y bibliotecas.