Archivos

 

Es útil utilizar archivos externos en juegos.  Por ejemplo, podrías hacer un archivo que describe qué ciertas cosas deben suceder en qué momento.  También puedes querer salvar la información para la próxima vez que se ejecute el juego.  Las funciones siguientes sirven para leer y escribir datos en archivos de texto:

 

file_text_open_read(fname) Abre el archivo fname para lectura. La función devuelve la id del archivo que debes utilizar en el resto de funciones. Puedes abrir hasta un máximo de 32 archivos simultáneamente. No olvides cerrar los archivos una vez que no los necesites.

file_text_open_write(fname) Abre el archivo fname para escritura, creándolo si no existe. La función devuelve la id del archivo que debes usar en las demás funciones.

file_text_open_append(fname) Abre el archivo fname para agregar datos al final, creándolo si no existe. La función devuelve la id del archivo que debes usar en las demás funciones.

file_text_close(fileid) Cierra el archivo indicado por fileid (¡No olvides llamarla!).

file_text_write_string(fileid,str) Escribe la cadena str al archivo indicado por fileid.

file_text_write_real(fileid,x) Escribe el valor real x en el archivo indicado por fileid.

file_text_writeln(fileid) Escribe un carácter de nueva línea en el archivo.

file_text_read_string(fileid) Lee una cadena del archivo y devuelve esta cadena. Una cadena termina al final de la línea.

file_text_read_real(fileid) Lee un valor real del archivo y devuelve este valor.

file_text_readln(fileid) Salta el resto de la línea en el archivo e inicia al principio de la siguiente línea.

file_text_eof(fileid) Indica si hemos llegado al final del archivo.

 

Para manipular archivos del sistema puedes utilizar las siguientes funciones:

file_exists(fname) Indica si el archivo con el nombre fname existe (true) o no (false).

file_delete(fname) Borra el archivo con el nombre fname.

file_rename(oldname,newname) Renombra el archivo con el nombre oldname a newname.

file_copy(fname,newname) Copia el archivo fname al nombre newname

directory_exists(dname) Indica si la carpeta dname existe.

directory_create(dname) Crea una carpeta con el nombre dname (incluyendo la ruta a esa carpeta) si no existe.

file_find_first(mask,attr) Devuelve el nombre del primer archivo que satisfaga las condiciones de la máscara mask y los atributos attr. Si no existe tal archivo, devuelve una cadena vacía. La máscara puede contener una ruta y comodines (*), por ejemplo ‘C:\temp\*.doc’. Los atributos indican archivos adicionales que quieras ver. (Por lo que los archivos normales son siempre devueltos cuando satisfacen la máscara). Puedes agregar las siguientes constantes

para ver el tipo de archivos que desees:

fa_readonly archivos de sólo lectura

fa_hidden archivos ocultos

fa_sysfile archivos de sistema

fa_volumeid archivos volume-id

fa_directory carpetas

fa_archive archivos archivados

file_find_next() Devuelve el nombre del siguiente archivo que satisface la máscara y los atributos indicados previamente. Si no existe tal archivo, devuelve una cadena vacía.

file_find_close() Debe ser llamada después de manipular los archivos para liberar la memoria.

file_attributes(fname,attr) Indica si el archivo fname tiene todos los atributos dados por attr. Usa una combinación de las constantes indicadas anteriormente.

 

Las siguientes funciones sirven para cambiar los nombres de archivos. Observa que estas funciones no afectan a los archivos en sí, si no al nombre:

filename_name(fname) Devuelve el nombre del archivo fname, con la extensión pero sin la ruta.

filename_path(fname) Devuelve la ruta al archivo indicado, incluyendo la última barra de separación.

filename_dir(fname) Devuelve el directorio del archivo, que normalmente suele ser igual que la ruta pero sin la última barra de separación.

filename_drive(fname) Devuelve la información de la unidad del archivo.

filename_ext(fname) Devuelve la extensión del archivo, incluyendo el punto.

filename_change_ext(fname,newext) Devuelve el nombre del archivo con la extensión sustituida por newext. Si indicas una cadena de texto vacía para newext puedes eliminar la extensión del archivo.

 

En algunas situaciones puede que quieras leer datos de archivos binarios. Para ello dispones de las siguientes rutinas de bajo nivel:

file_bin_open(fname,mod) Abre el archivo con el nombre especificado. El parámetro mod indica qué se puede hacer con el archivo: 0=leer, 1=escribir y 2= leer y escribir. La función devuelve la id del archivo que debe utilizarse en las demás funciones. Puedes abrir hasta un máximo de 32 archivos simultáneamente, pero no olvides cerrarlos cuando hayas terminado con ellos.

file_bin_rewrite(fileid) Limpia el archivo indicado por fileid, es decir, borra todo su contenido y se sitúa al principio del archivo para empezar a escribir.

file_bin_close(fileid) Cierra el archivo especificado. No olvides llamarla!

file_bin_size(fileid) Devuelve el tamaño en bytes del archivo indicado.

file_bin_position(fileid) Devuelve la posición actual en el archivo en bytes (0 es el principio del archivo).

file_bin_seek(fileid,pos) Mueve la posición en el archivo a la posición indicada por pos. Para añadir contenido al final de un archivo, usa el valor file_bin_size(fileid) para el parámetro pos.

file_bin_write_byte(fileid,byte) Escribe un byte de datos al archivo especificado.

file_bin_read_byte(fileid) Lee un byte de datos del archivo.

 

Si el jugador ha seleccionado modo seguro en sus preferencias, para ciertas rutinas, no se permite especificar la ruta y sólo puedes acceder a los archivos en la carpeta de la aplicación p. Ej. para escribir en ellos.

 

Las siguientes tres variables de sólo lectura pueden ser útiles:

game_id* Identificador único para el juego. Puedes usarlo si necesitas un nombre único de archivo.

working_directory* Carpeta de trabajo del juego. (No incluye la diagonal invertida final).

temp_directory* Carpeta temporal creada para el juego. Puedes almacenar archivos temporales aquí. Serán eliminados cuando el juego finalice.

 

En ciertas situaciones podrías dar al jugador la posibilidad de introducir argumentos mediante la línea de comandos al juego que están ejecutando (para por ejemplo activar trucos o modos especiales). Para obtener estos argumentos puedes usar las siguientes dos rutinas:

parameter_count() Devuelve el número de parámetros de la línea de comandos (nota que el nombre del programa es uno de ellos).

parameter_string(n) Devuelve los parámetros n de la línea de comandos. El primer parámetro tiene índice 0 y es el nombre del programa.

 

Por último, puedes leer el valor de las variables de entorno con la siguiente función:

environment_get_variable(name) Devuelve el valor (una cadena de texto) de la variable de entorno con el nombre especificado.