Transcript
Page 1: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

ArchivosArchivos

Page 2: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...)fopen(...)

FILE * fopen(char* nombre_arch, char* modo)FILE * fopen(char* nombre_arch, char* modo)

Donde:

es una estructura que contiene toda la información necesaria para emplear el archivo.

FILEFILE

Page 3: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

typedef struct {

short level; /* nivel de ocupación del buffer */

unsigned flags; /* indicadores de control */

char fd; /* descriptor del fichero */

unsigned char hold; /* carácter de ungetch()*/

short bsize; /* tamaño de buffer */

unsigned char *buffer, *curp;

/* puntero al buffer */ /* posición en curso */

unsigned istemp;

short token; /* se emplea para control */

} FILE; /* tipo FILE */

Page 4: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Modo:Modo:

Es una cadena de caracteres que indica la forma en que se va utilizar el archivo.

““r”r” Abre un archivo de texto para leer.

““w”w” Abre un archivo de texto para escribir.

Page 5: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

““a”a” Abre un archivo de texto para añadir al final.

““wb”wb” Abre un archivo binario para escribir.

““ab”ab” Abre un archivo binario para añadir al final.

““rb”rb” Abre un archivo binario para leer.

Page 6: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

““w+b”w+b” Crea un archivo binario para leer y escribir.

““r+b”r+b” Abre un archivo binario para leer y escribir.

Page 7: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Si la función no tiene problemas al abrir el fichero devuelve un puntero a FILE que apunta al canal asociado.

Si encuentra errores, por ejemplo una protección de escritura o disco lleno devuelve un puntero NULO.

Page 8: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Para cerrar un archivo se utiliza la función fclosefclose.

int fclose(FILE * nombre_arch)int fclose(FILE * nombre_arch)

Donde:

nombre_archnombre_arch

Es un puntero al archivo que se quiere cerrar.

Page 9: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Devuelve 0 cuando no hay errores.

Cualquier otro valor indica error.

Page 10: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Para reconocer el fin de archivo se utiliza la función feof(...)feof(...)

int feof ( FILE * fp )int feof ( FILE * fp )

Devuelve 0 si nono ha llegado al final del archivo.

En caso contrario devuelve un valor distinto de 0.

Page 11: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Escritura de caracteresEscritura de caracteres

int fputc(int ch, FILE * fp)int fputc(int ch, FILE * fp)

Si no hay errores devuelven el carácter escrito.

Si hay algún error devuelve EOF.

Page 12: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Escritura de caracteresEscritura de caracteres

int fgetc( FILE * fp)int fgetc( FILE * fp)

Si no hay errores devuelve el carácter leído.

Si hay algún error devuelve EOF.

Page 13: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Escritura y lectura de cadena de Escritura y lectura de cadena de caracterescaracteres

int fputs(char* str, FILE * fp)int fputs(char* str, FILE * fp)Escribe una cadena de caracteres en un archivo.

char fgets(char* str, FILE * fp)char fgets(char* str, FILE * fp)

Lee una cadena de caracteres de un archivo hasta que encuentre fin de línea.

Page 14: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Archivos de acceso Archivos de acceso directodirecto

Los registros son de longitud fija.

Se puede acceder a ellos directamente, sin tener que buscar a través de otros registros.

Page 15: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Los datos pueden ser insertados sin destruir otros datos en el archivo.

Los datos almacenados anteriormente también pueden ser actualizados o borrados; sin tener que reescribir todo el archivo.

Page 16: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Lectura y escritura Lectura y escritura de un bloque de de un bloque de

informacióninformaciónExisten dos funciones que permiten leer y escribir bloques de información en un archivo.

Page 17: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

La función freadLa función fread

Transfiere un número especificado de bytes de la posición en el archivo, especificado por el apuntador de posición de archivo, a un área en memoria empezando a partir de una dirección especificada.

Page 18: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

int fread(int fread( void* buffer, void* buffer, intint num_bytes,num_bytes,int contador, FILE* fp) int contador, FILE* fp)

Donde:buffer:buffer: Es un puntero que señala a

una zona de memoria que va a recibir los datos del archivo.

num_bytes:num_bytes:Es el número de bytes que se van a leer.

Page 19: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

contador:contador: indica el número de veces que se efectua la lectura.

fp:fp: es el puntero al archivo.

Page 20: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

La función fwriteLa función fwrite

Transfiere a un archivo un número especificado de bytes empezando en una posición especificada de memoria.

Page 21: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

int fwrite(int fwrite( void* buffer, void* buffer, int num_bytes, int num_bytes, int contador, FILE* fp)int contador, FILE* fp)

Donde:

buffer:buffer: Es un puntero que apunta a la información que se escribirá en el archivo.

num_bytes:num_bytes:

Es el número de bytes que se escriben.

Page 22: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

contador:contador: indica el número de veces que se efectua la escritura.

fp:fp: es el puntero al archivo.

Page 23: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

La función fseekLa función fseek

Permite realizar accesos directos sobre un archivo.

Page 24: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

num_bytes:num_bytes:Es el número de bytes necesarios, desde el orígen, para acceder a la posición deseada.

int fseek(int fseek( FILE* fp,FILE* fp,long int num_bytes, long int num_bytes, int origen)int origen)Donde:

fp:fp: Es un puntero al archivo que se desea acceder.

Page 25: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Origen:Origen: Es una de estas macros:

MACRO ORIGEN VALOR

SEEK_SET Desde el principio del archivo.

0

SEEK_CUR Desde la posición actual.

1

SEEK_END Desde el final del archivo.

2

Page 26: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Estas macros corresponden a valores enteros e indican desde qué posición se comienza a sumar num_bytes para hallar la posición final.

Page 27: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

fseek devuelve 0

cuando no hay errores,

en caso contrario

devuelve un valor diferente de cero

Normalmente se utiliza fseek con archivos binarios.

Page 28: Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*

Ejemplo:Ejemplo:

fseek(fp, (long) 5, SEEK_SET);

Coloca el indicador de posición en el sexto byte del archivo apuntado por fp.

fseek(fp, 5L, SEEK_SET);