Fundamentos de programación

Anuncio
Fundamentos de
programación
Ficheros
Ficheros
Un fichero o archivo es un objeto abstracto sobre
el que se puede leer y escribir información. Los
datos almacenados en un fichero no son volátiles.
¾ Ficheros de texto
• Almacenan los datos usando caracteres ASCII.
• En general, pueden ser visualizados con un editor de texto.
¾ Ficheros binarios
• Almacenan los datos como una secuencia de bytes.
• No pueden ser visualizados con un editor de texto.
Ficheros
Para acceder a un fichero utilizaremos el tipo FILE
que está predefinido en el header <stdio.h>. El
fichero con el que vamos a trabajar quedará
identificado con un puntero a FILE.
#include <stdio.h>
FILE * fp;
C predefine tres objetos estándar de tipo FILE * :
¾ stdin : Entrada estándar (teclado)
¾ stdout : Salida estándar (pantalla)
¾ stderr : Salida de errores (pantalla)
Ficheros
Operaciones con ficheros
FILE * fopen (const char * name, const char * modo)
Abre el fichero de nombre name; retorna un puntero que identifica el fichero
en cuestión, o NULL si la apertura falla. Los modos válidos son:
“r”
Abre fichero para sólo lectura
“w”
Crea fichero para sólo escritura (borra contenido anterior)
“a”
Abre o crea fichero para escritura al final del mismo (añadir)
“r+”
Abre fichero para modificación (lectura y escritura)
“w+”
Crea fichero para modificación (borra contenido anterior)
“a+”
Abre o crea fichero para modificación (escritura sólo al final)
“xb”
“rb”
“w+b”
b indica fichero binario, x es cualquier modo anterior
Abre fichero binario en modo sólo lectura
Crea fichero binario en modo modificación (borra contenido)
Ficheros
Operaciones con ficheros
int fclose (FILE * fp)
Obliga a volcar el contenido de la memoria intermedia y cierra fp; retorna 0
si el cierre es correcto, o EOF si se produce algún error.
int fflush (FILE * fp)
Obliga a escribir en fp cualquier dato en memoria intermedia que aún no ha
sido volcado; retorna 0 si la operación es correcta, o EOF en otro caso.
int feof (FILE * fp)
Retorna un valor no nulo si se ha alcanzado el fin de fichero en fp.
long ftell (FILE * fp)
Retorna la posición en curso dentro de fp, o -1 si hay un error
int fseek (FILE * fp, long offset, int origen)
Asigna una posición dentro de fp; cualquier lectura o escritura de datos
posterior comenzará a partir de la posición asignada. Retorna un valor no
nulo si se encuentra un error.
Ficheros
Operaciones con ficheros
int fprintf (FILE * fp, const char * formato, ...)
Escribe en fp los datos correspondientes con el formato indicado; retorna el
número de caracteres escrito, o un número negativo si hay error.
int printf (const char * formato, ...)
printf (formato, ...) es equivalente a fprintf (stdout, formato, ...).
int sprintf (char * s, const char * formato, ...)
sprintf es lo mismo que printf, excepto que se escribe sobre la cadena s y
que se termina con un ‘\0’; retorna el número de caracteres escritos sin
incluir el nulo ‘\0’, o un número negativo en caso de error.
int fscanf (FILE * fp, const char * formato, ...)
Obtiene de fp los datos de acuerdo con el formato especificado y asigna,
previa conversión, los valores a los argumentos que deben ser direcciones;
retorna EOF si es fin de fichero o bien se detecta error en la conversión de
algún dato, en otro caso retorna el número de datos asignados.
Ficheros
Operaciones con ficheros
int scanf (const char * formato, ...)
scanf(formato, ...) es equivalente a fscanf(stdin, formato, ...).
int sscanf (const char * s, const char * formato, ...)
sscanf(s, formato, ...) es equivalente a scanf(formato, ...) excepto que los
caracteres de entrada se toman del string s.
int fgetc (FILE * fp)
Retorna el siguiente carácter de fp como unsigned char (convertido a int), o
EOF si es fin de fichero o bien ocurre un error.
char * fgets (char * s, int n, FILE * fp)
Obtiene como máximo los siguientes n - 1 caracteres de fp, que son
almacenados en el array s. fgets termina cuando encuentra un salto de
línea ‘\n’ que es incluido en el array, y el array se finaliza con un ‘\0’. fgets
devuelve NULL si es fin de fichero o hay un error, y en otro caso s.
Ficheros
Operaciones con ficheros
int fputc (int c, FILE * fp)
Escribe el entero c (convertido a unsigned char) en fp; retorna el carácter
escrito, o EOF si hay error.
int fputs(const char *s, FILE * fp)
Escribe el string s (no necesariamente debe contener ‘\n’) en fp; retorna
EOF si se encuentra un error, o un número negativo en otro caso.
int getc (FILE * fp)
getc es equivalente a fgetc, excepto que es una macro y por tanto puede
evaluar fp más de una vez.
int getchar (void)
getchar() es lo mismo que getc(stdin).
char * gets (char * s)
Carga en el array s la siguiente línea de la entrada estándar, reemplazando
el fin de línea ‘\n’ por ‘\0’; retorna s, o NULL si es fin de fichero o hay error.
Ficheros
Operaciones con ficheros
int putc (int c, FILE * fp)
putc es equivalente a fputc excepto que es una macro, y en consecuencia
puede evaluar fp más de una vez.
int putchar (int c)
putchar(c) es lo mismo que putc(c,stdout).
int puts (const char * s)
Escribe el string s seguido de un salto de línea ‘\n’ en la salida estándar;
retorna EOF si ocurre un error, o un número no negativo en otro caso.
int ungetc (int c, FILE * fp)
Reubica (hace retroceder) el carácter c (convertido a unsigned char) en fp,
de forma que pueda retornarse en la siguiente lectura. Sólo se garantiza un
carácter de retroceso por fichero, y EOF no puede ser reubicado. ungetc
retorna el carácter reubicado, o EOF si se detecta un error.
Ficheros
Operaciones con ficheros
size_t fread (void * ptr, size_t size,
size_t nobj, FILE * fp)
Almecena en el array ptr, como máximo, nobj objetos de tamaño size
leídos de fp; retorna el número de objetos leídos (que puede ser menor que
el número nobj especificado). Para determinar el status de fread se deben
utilizar las funciones feof(fp) y ferror(fp).
size_t fwrite (const void * ptr, size_t size,
size_t nobj, FILE * fp)
Escribe en fp nobj objetos de tamaño size que son obtenidos del array ptr;
retorna el número de objetos escritos (que puede ser menor que nobj si se
detecta un error).
int ferror (FILE * fp)
Retorna un valor no nulo si el indicador de error de fp está activo.
Ficheros
#include <stdio.h>
int main ()
/* copia de ficheros */
{
int c;
FILE *fent, *fsal;
if((fent = fopen(“entrada”,“r”)) == NULL) {
puts(“Error fichero entrada”);
return -1;
}
if((fsal = fopen(“salida”,“w”)) == NULL) {
puts(“Error fichero salida”);
return -1;
}
while((c = fgetc(fent)) != EOF)
fputc(c,fsal);
fclose(fent);
fclose(fsal);
return 0;
}
Descargar