¡Descarga Manipulación de Archivos en C: Flujos y Sistemas de Archivos y más Diapositivas en PDF de Programación C solo en Docsity! Archivos Estructuras de datos Flujos Un flujo (stream) es una serie de bytes que viajan de un lugar a otro de la computadora Flujos Para que la información viaje a otro lugar de la computadora, hay que crear un flujo. Archivos Un archivo es un conjunto de bytes almacenado en un medio no volátil (Disco duro, USB drive) archivo Archivos Los bytes se distribuyen de forma secuencial en el medio, aunque en la computadora no los veamos así… # i n c l u d e < s t d i o . h > \ n # i n c l u d e < s t d l i b . Función fopen() La función fopen() se usa para crear un flujo de datos #include <stdio.h> FILE *fopen(char *archivo,char *modo) • Recibe: –archivo: Cadena con el nombre del archivo físico a conectar –Modo: Modo de apertura (ver siguiente acetato) • Regresa: –FILE *: Direccion de memoria con la estructura creada –NULL (0): Cuando falla en la apertura del flujo. Función fclose() La función fclose() se usa para cerrar un flujo abierto con fopen() garantizando que toda la información se escriba correctamente. #include <stdio.h> int fclose(flujo) • Recibe: flujo: *FILE con el flujo abierto con fopen() • Regresa: 0: Si el flujo se cerró con éxito. -1 (o EOF): Si falló el cierre Funciones comunes del sistema de archivos en C Nombre Función Sintaxis Ejemplo fopen() Abre una corriente FILE *fopen(char *archivo,char *modo) fp = fopen ( "fichero.in", "r" ); fclose() Cierra una corriente int fclose(flujo) fclose(fichero) fseek() Salta a una cierta posición de un fichero int fseek (FILE* fichero, long desplazamiento, int desde); fseek(fichero, -10, SEEK_CUR); feof() Devuelve verdadero si se alcanzó la marca EOF int feof(FILE *fichero); !feof(fichero) ferror() Determina si una operación con archivos produce un error. Devuelve verdadero si ha ocurrido un error int ferror(FILE *fp) ferror(fp) rewind() Pone el localizador de posición de archivo al comienzo void rewind(FILE *stream rewind(fp) remove() Borra un archivo int remove(char *nombre de archivo) remove(filename) rename() Renombra un archivo int rename(const char *old_filename, const char *new_filename) rename(oldname, newname) File Pointer Al abrir un flujo, el sistema operativo asigna un Apuntador a archivo o File Pointer (FP). El File Pointer apuntará al siguiente byte en ser leído. Cada operación de lectura/escritura mueve el FP # i n c l u d e < s t d i o . h > \ n # i n c l u d e < s t d l i b . FP End OF File (EOF) El sistema operativo asigna un carácter especial llamado Fin de Archivo o End of File (EOF) al último byte del archivo. FP s e ” ) ; \n } \n E O F Función feof() La función feof() checa si el fin de archivo (EOF) del flujo asociado se ha alcanzado. #include <stdio.h> int feof(flujo) • Recibe: flujo: *FILE con el flujo abierto con fopen() • Regresa: 0: si no se ha alcanzado el Fin de Archivo (EOF). != 0: si se alcanzó Fin de Archivo (EOF)
TRANSFORMO MI VIDA
Escritura/Lectura a archivos binarios
1 //Escritura/Lectura de archivosbinario
2 sinclude «stdio.h>.
3 include <stdlib.h>
4 include <string.h>
5
6H struet agenda €
7 char nombre[20]5
s char apellido[28]5
3 char telefono[15];
sl);
12 — struct agenda registro;
En
13 — int main)
ES
as FILE *fp5
15
E if ((fp - Fopent "agenda.dat", "ab" ))
18 printf( "no se puede abrir el archivo.An” );
19 exit( 1);
20 3
a
2d wc
= printfc "nombre: * );
2 gets(registro.nombre):]
25 Af (stremp(registro.nombre,""))
24 £
2 E printé( "apellido: * );
28 E gets(registra.apellAdo);
29 E printf "Telefono: " );
E | gets(registra.telefono);
RR RONIEASA AE EE
/* Guarda el registro en el archivo binario*/
furite( áregistro, sizeof(registro), 1, fp )5
,
) While (stremp(registro.nombre,""
DN
fclose( fp )3
//Leer datos desde el archivo y mostrarLo en pantalLa
FILE *fp25
3F ((fp2 - Fopen( "agenda.dat", “rb" )) == WuLL) £
printf( "No se puede abrir el archivo.An” )5
extt(1)5
1
while (Ifeof(fp2)) €
Af (freadí Bregistro, sizeof(registro), 1, fp2 )) 4
printf("1n Los datos leidos desde el achivo son:inn");
: RsiWw", — registro.nombre );
registro. apellido);
sin", registro.telefono)5
printr( “Teléfo
,
fclose( fp2 )5
Gbkep
Esc/Lec archivos de texto “===>
//escritura/lectura de archivos de texto
sinclude <stdio.h>
*tinclude <stdlib.h>
sinclude <string.h>
1
struct agenda [
char nombre[20]3
char apellido[ 20]:
char telefono[15];
ERES
Struct agenda registro; 39
49 | //leer datos desde el archivo y mostrarlo en pantalla
int main() 41 FILE *fp25
42
FILE *fp3 43 AF ((fp2 = fopen( "nombres. txt' )) = NULL) £
9. printf( "No se puede abrir el fichero.An" )3
1f ((fp = fopen( "nombres.txt", “a” )) == NULL) ( 45 exit( 1);
printF( "No se puede abrir el archivo.ln" ); 46 3
exit( 1); 47
48 while (Ifeof(Fp2)) £
49 if (fread( £registro, sizeof(registro), 1, fp2 )) £
do í se printf("n Los datos leidos desde el achivo son:imin");
printf( "Nombre: * )3 51 printf( "Nombre: %sin", — registro.nombre )5
gets(registro.nombre); 52 primtf( "Apellido: %sin", registro.apellido);
if (stromp(registro.mombre,”")) E , printf( "Teléfono: %sin", registro.telefono);
t
printf( "Apellido: “ )3 35 j
gets(registro.apellido); 56
printf( "Teléfor » 37 Felose( fp2 );
gets(registro.telefono); st)
/* Guarda el registro en el archivo */
fwrite( Bregistro, sizeof(registro), 1, fichero );
) uhile (stremp(registro.nombre,"")!= 8)3
fclose( fp );
UPÁEP
Ejemplo: 2.1 y 2.2
*include <stdio.h>
ttinclude <stdlib.h>
int main()
li
FILE *fp;
float muestra[ 108];
int i;
if ((fp=fopen ("prueba") "wb"))==MULL)
t
printf(“no puede abrirse el archivoin");
exit(1)5
7
for (i-85 1<100;1++)
// muestra[i]=(float) 4;
muestra[i]=1*1.05
//graba todo el arreglo de 190 flotantes al archivo de un solo paso
furite(muestra, sizeof(muestra),1,fp)5
fclose(fp);
TRANSFORMO MI VIDA
//Programa que Lee un archivo binario con funcion fread()
tinclude <stdio.h>
tinclude <stdlib.h>
int main()
FILE *fpz
float muestra[108]3
int á;
if ((fp=fopen ("prueba","rb"))
¿A
NULL)
printf("no puede abrirse el archivoln");
exit(1)5
/flee el archivo entero en un paso
fread(muestra, sizeof (muestra), 1,fp)5
for (i=1; icl00ji++)
¿ printf("X5.0f,", muestra[i])5
felose(fp);
EP
TRANSFORMO MI VIDA
Estructura de datos
Archivos
Gbkep
Transformo mi vida. Soy UPAEP