| Artículos | 01 DIC 1995

Aprenda cómo construir programas

Tags: Histórico
Nombres largos de archivo en Windows 95
Jaime Peña.

Con la presentación de Windows NT y, mas recientemente, con Windows 95, se ha modificado el rígido sistema de denominaciones de archivo tipo 8.3. Los nombres largos de archivo (Long File Names, LFN) nos dan mayor flexibilidad, pero implican cambios en las rutinas de acceso a archivos.

La aparición de los nombres largos de archivo (Long File Names, LFN) era una de las necesidades más acuciantes de los usuarios de ordenadores personales. La tradicional estructura 8.3 (nombre de hasta 8 caracteres y una extensión de hasta 3) imponía una estructura demasiado rígida. Con la aparición de los sistemas de archivos de 32 bits (HPFS de OS/2 y NTFS de Windows NT), se dio un importante paso adelante, pero desafortunadamente sus sistemas de archivos son incompatibles.

Windows 95 también permite utilizar nombres largos de archivo, sistema FAT/VFAT. Nuevamente hemos de decir que, desafortunadamente, su sistema es incompatible con los de OS/2 y Windows NT. En este último caso, la cuestión es más grave, ya que se trata de un sistema operativo hermano.

Con todo, las ventajas son evidentes y el API de desarrollo idéntico (Win32). Por tanto, podremos hacer un estudio de cómo hemos de utilizar las funciones Win32 para sacar partido de estas posibilidades. Y todo ello con un código que será plenamente portable entre Windows 95 y Windows NT.

El sistema LFN-VFAT de Windows 95 es un compromiso entre el sistema de archivos tradicional FAT (8.3) y un controlador virtual de conversión de LFN a nombre corto. Por ejemplo, Windows 95 dispone de un sistema de conversión de nombres largos a nombres cortos que mantiene la compatibilidad (algo crítica y no excesivamente segura, a nuestro entender) para intercambiar información entre el nuevo sistema VFAT y el antiguo FAT. Decimos que es algo insegura, ya que no se garantiza que un archivo intercambiado con un sistema FAT (DOS o Win16), se recupere como el antiguo VFAT del que partió. Algo esencial y ciertamente crítico, que ha de ser tenido muy en cuenta por programadores y simples usuarios de Windows 95.

A lo largo del presente artículo veremos cómo tratar con los nombres largos de archivo. Comprobará que la situación que se le plantea no es excesivamente complicada desde el punto de vista de la programación, pero sí requerirá su atención y no valdrá, en la generalidad de los casos, recompilar aplicaciones Win16 o DOS a Win32/GUI o Win32/consola, respectivamente.

La estructura de los LFN

La necesidad de mantener la compatibilidad con el tradicional sistema de archivos FAT ha forzado a los diseñadores de Microsoft a realizar una pirueta en las famosas entradas de directorio de la FAT. Así, una entrada de nombre largo de archivo ocupará varias entradas de nombre corto, hasta completar el tamaño necesario para albergar los 255 caracteres máximo. Por otra parte, señalar que la trayectoria completa admisible en el sistema VFAT de Windows 95 no puede superar los 260 caracteres. En la tabla de la figura 1 recogemos los valores de las constantes que tienen que ver con el manejo de archivos. Obsérvese que los valores cambian según se trate de programación en Win16 o en Win32. Por ejemplo, la constante MAXPATH define el tamaño máximo, en caracteres, que puede representar una ruta completa de búsqueda (path) de un archivo. En Win16 estaba limitado a 80 caracteres, en Win32 el límite es de 260 caracteres. El modo en que internamente se realiza este proceso de conversión no es de excesivo interés para nosotros, tratado desde la perspectiva de programación a alto nivel, en que la protección de accesos del sistema operativo nos restringirá las escrituras directas en disco. Sólo aquellas aplicaciones que hayan obtenido permisos de acceso mediante la función DeviceIoControl, que trata de diferentes permisos de acceso a bajo nivel a unidades de almacenamiento, pueden acceder a cambios en la estructura de directorios. Simplemente nos interesará conocer que las entradas de nombre largo de archivo van precedidas de una entrada de nombre corto tipo FAT y se enlazan con ella mediante una combinación de atributos particular. De ahí que sea especialmente peligroso usar utilidades de bajo nivel diseñadas para DOS y/o Win16. Cuando se está trabajando en Windows 95, el propio sistema se encarga de advertirnos de este potencial problema, pero si arrancamos el ordenador en modo DOS debemos ser nosotros mismos quienes hemos de evitar la ejecución de programas DOS y/o Windows 3.1.

Los nombres largos de archivo VFAT de Windows 95 permiten utilizar todos los caracteres del nombre corto, pero además cumplen las siguientes características. Primera, pueden contener hasta 255 caracteres y terminan en un carácter nulo adicional (cadenas ASCIIZ). Este límite está también condicionado por el máximo de una ruta de acceso completa, que no puede sobrepasar los 255 caracteres (260 incluyendo el nombre de la unidad y las barras de separación de directorios, con un carácter nulo final). Segunda, los nombres largos permiten espacios en blanco, por ejemplo formando frases. Tercera, los nombres largos conservan la diferencia entre mayúsculas/minúsculas cuando se crea el archivo. Esa diferencia se muestra en el nombre largo, mientras que en el nombre corto equivalente se convertirán en mayúsculas todos los caracteres. Finalmente, los nombres largos, permiten el uso de caracteres adicionales, en concreto, podemos usar los caracteres '+' (más), ',' (coma), ';' (punto y coma), '=' (igual), '[' y ']' (corchetes).

APIs de soporte para LFN

Desde la perspectiva de programadores nos interesará utilizar funciones que den soporte a LFN. Por supuesto, las aplicaciones que usen LFNs deberán ser compiladas en Win32, bien sea en modo consola (modo texto) o GUI (modo gráfico, Graphics User Interface). Para hacernos una idea general de qué funciones hay disponibles para manejar archivos, directorios y unidades de disco en Win32, hemos recogido todas ellas en la tabla de la figura 2.

Observe que las primeras funciones que se exponen, que contienen un carácter de subrayado al comienzo de su nombre, son ya obsoletas y no se recomienda su empleo. Se trata de funciones proporcionadas en Win32 con el fin de dotar de compatibilidad con las anteriores APIs de Win16. Hemos recogido también las funciones alternativas recomendadas en la documentación de Microsoft.

Aquellas funciones que usan cadenas de nombres LFN (para su utilización en VFAT de Windows 95 o de NTFS en Windows NT), son las que garantizan el correcto uso de nombres largos para acceder, crear, borrar y/o renombrar archivos LFN y deberían ser las únicas empleadas en nuestros programas. Habrá, en consecuencia, que hacer una buena labor de reprogramación de las funciones de acceso a archivos cuando migremos nuestras aplicaciones a Win32. El modo de utilizar estas funciones es idéntico al de nombres cortos, no siendo preciso, como en la línea de comandos del modo DOS de Windows 95, encerrar los nombres con comillas o semejantes. Nótese que el tipo de cadena es LPCTSTR, que permite el empleo de caracteres ampliados UNICODE.

Una interesante función nos permite conocer el sistema de archivos sobre el cual estamos trabajando. Se trata de GetVolumeInformation(). En la figura 3 vemos su declaración y el significado de sus parámetros. Esta función es la única que nos puede ayudar a determinar el sistema de archivos de una unidad de disco (local o en red). En el listado de la figura 4, hemos implementado la función info_volumen(), que nos muestra cómo hacer uso de ella. Obsérvese que no hay forma de saber que el sistema es tipo VFAT de Windows 95 a través del parámetro lpFileSystemNameBuffer, nos indicará sólo que es FAT. Hemos de comprobar que el valor del parámetro lpMaximunComponentLength es 255 y así tendremos la garantía de que se trata del sistema VFAT de Windows 95.

Ejemplo de uso

En el lista

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información