Universidad Andrés Bello Departamento de Informática Archivos • Definición: – Forma en la cual un programa se comunica con el mundo exterior. Tema 4: Archivos Profesor: Sebastián Moreno 2 Apertura de archivos Archivos • Según el tipo de datos que almacenarán, existen 2 tipos de archivo: – Archivo de texto. – Archivo binario. • Establecer un área intermedia para leer / escribir archivo, declaración y referencia al archivo: FILE *archivo; • La estuctura FILE esta definida en stdio.h • Los pasos para operar con archivos son: – Abrir el archivo – Operar con el archivo (lectura, escritura, entre otros) – Cerrar archivo Profesor: Sebastián Moreno 3 Apertura de archivos 4 Apertura y Cerrado de archivos • Para abrir un archivo se utilizará fopen archivo = fopen ( nombre_archivo, tipo_archivo); ...donde tipo_archivo: "r" Abrir un archivo existente sólo para lectura. "w" Abrir un nuevo archivo sólo para escritura. Si ya existe, será destruido y creado uno nuevo en su lugar. "a" Abrir un archivo para añadir. Si no existe, se crea uno nuevo. "r+" Abrir un archivo existente para lectura y escritura. "w+" Abrir un archivo nuevo para lectura y escritura. Si ya existe, será destruido y creado uno nuevo en su lugar. "a+" Abrir un archivo existente para leer y añadir. Si no existe, se crea uno nuevo. Profesor: Sebastián Moreno Profesor: Sebastián Moreno • fopen retorna NULL si no puede abrir el archivo • Una vez abierto el archivo, un puntero se posiciona en el primer dato. • Para cerrar un archivo se utiliza fclose fclose ( archivo ); 5 Profesor: Sebastián Moreno 6 1 Operaciones con archivos 1. Texto con formato • Para la lectura del archivo con formato se utiliza • Funciones para trabajar con archivos fscanf( archivo, “tipo_dato”, var1, var2...)# 1. Texto con formato ( fscanf(), fprintf() ) • Para la escritura de un archivo con formato se utiliza 2. Líneas ( fgets(), fputs() ) • Recibe los parámetros habituales de scanf y printf 3. Bloques ( fread(), fwrite() ) • Al invocar la función, se mueve el puntero al siguiente dato. 4. Caracteres ( fgetc(), fputc() ) fprintf( archivo, “tipo_dato”, var1, var2..) • Ejemplo: fscanf( archivo, "%d", &x ); fscanf( archivo, "%d %d", &x, &y ); fprintf( archivo, "%d", x ); fprintf( archivo, “un dato extra” ); fprintf( archivo, “iteracion %d\n”, i ); Profesor: Sebastián Moreno Profesor: Sebastián Moreno 7 2. Por líneas (cadena de caracteres)4 3. Por bloques • Para la lectura de un archivo por bloques se utiliza • Para la lectura de una línea o cadena de caracteres: fgets( cadena , n_caracteres, archivo )# Para la escritura de una línea o cadena de caracteres: fputs( cadena, archivo )# fread( bloque_a_leer, tamano_cada_registro, numero_registros, archivo )# » Devuelve la cantidad de registros leídos • Para la escritura de un archivo por bloques se utiliza • Orientada a leer cadena de caracteres. • Ejemplo: fwrite( bloque_a_escribir, tamano_cada_registro, numero_registros, archivo )# char linea[20]; fgets(linea, 10, archivo); /* leerá 9 caracteres de archivo */ fputs(linea, otro_archivo); /* escribirá linea en otro_archivo */ char linea2[20] = “Otra linea”; fputs(linea2, otro_archivo);/* escribirá ”Otra linea” en otro_archivo */ Profesor: Sebastián Moreno » Devuelve la cantidad de registros escritos • Al invocar la función, se mueve el puntero al siguiente bloque. • Orientado para trabajar con registros de longitud constante, por ejemplo, estructuras. Profesor: Sebastián Moreno 9 Ejemplo 10 4. Por caracteres • Para leer un carácter desde un archivo: Tamaño de cada registro struct ejemplo{ int a, b; } struct ejemplo estructura; fgetc( archivo )# Para escribir un carácter se utiliza: fputc( caracter, archivo )# fread( estructura, sizeof(estructura), 1 , archivo) Cantidad de registros a leer fwrite( estructura, sizeof(estructura), 1, archivo2) Profesor: Sebastián Moreno 8 11 • Al invocar la función, se mueve el puntero al siguiente caracter. • Ejemplo: char caracter; letra = fgetc( archivo ); printf(”%c”, letra); fputc( letra, otro_archivo ) Profesor: Sebastián Moreno 12 2 Otras funciones rewind( archivo ) devuelve 1 si se esta al final del archivo, 0 en caso contrario. rewind( archivo ) vuelve al principio del archivo, es decir, sitúa el cursor al principio del archivo. Fin Tema 4 fseek( archivo, desplazamiento, origen); Sitúa el cursor en para leer o escribir en algún lugar deseado. ftell( archivo ); Devuelve la posición actual del cursor. Profesor: Sebastián Moreno 13 3