Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Claudio Paz
claudiojpaz@gmail.com
Noviembre 2023
1
Unidad 11
Manejo de archivos en C
2
Concepto de Flujo de datos (streams)
3
Concepto de Flujo de datos (streams)
La mayoría de los programas necesitan entradas (in) o salidas
(out), o ambas.
3
Concepto de Flujo de datos (streams)
La mayoría de los programas necesitan entradas (in) o salidas
(out), o ambas.
3
Concepto de Flujo de datos (streams)
La mayoría de los programas necesitan entradas (in) o salidas
(out), o ambas.
3
Concepto de Flujo de datos (streams)
La mayoría de los programas necesitan entradas (in) o salidas
(out), o ambas.
3
Concepto de Flujo de datos (streams)
4
Concepto de Flujo de datos (streams)
Todas las entradas y salidas son simplemente secuencias de
bytes que van de un lado a otro, llamadas streams
4
Concepto de Flujo de datos (streams)
Todas las entradas y salidas son simplemente secuencias de
bytes que van de un lado a otro, llamadas streams
4
Concepto de Flujo de datos (streams)
Todas las entradas y salidas son simplemente secuencias de
bytes que van de un lado a otro, llamadas streams
4
Concepto de Flujo de datos (streams)
5
Concepto de Flujo de datos (streams)
Cuando un programa comienza, ya tiene tres streams
estándar predefinidos, listos para su uso...
5
Concepto de Flujo de datos (streams)
Cuando un programa comienza, ya tiene tres streams
estándar predefinidos, listos para su uso...
5
Concepto de Flujo de datos (streams)
Cuando un programa comienza, ya tiene tres streams
estándar predefinidos, listos para su uso...
5
Concepto de Flujo de datos (streams)
Cuando un programa comienza, ya tiene tres streams
estándar predefinidos, listos para su uso...
5
Concepto de Flujo de datos (streams)
Cuando un programa comienza, ya tiene tres streams
estándar predefinidos, listos para su uso...
5
Concepto de Flujo de datos (streams)
6
Concepto de Flujo de datos (streams)
El SO puede permitir redireccionarlos a otros dispositivos.
6
Concepto de Flujo de datos (streams)
El SO puede permitir redireccionarlos a otros dispositivos.
6
Concepto de Flujo de datos (streams)
El SO puede permitir redireccionarlos a otros dispositivos.
6
Concepto de Flujo de datos (streams)
El SO puede permitir redireccionarlos a otros dispositivos.
6
El tipo FILE *
7
El tipo FILE *
El tipo FILE es una estructura definida en stdio.h que
contiene información para procesar el archivo
7
El tipo FILE *
El tipo FILE es una estructura definida en stdio.h que
contiene información para procesar el archivo
7
El tipo FILE *
El tipo FILE es una estructura definida en stdio.h que
contiene información para procesar el archivo
7
El tipo FILE *
8
El tipo FILE *
El usuario tiene acceso a esto Solo el SO tiene acceso a esto
para
el programa localiza el descriptor (el 7) El programa llama a un servicio del SO que usa
en la estructura FILE y lo utiliza para localizar los datos del FCB para controlar la lectura y escritura
el FCB en la tabla de archivos abiertos hacia el archivo en el disco. El usuario no puede acceder
al FCB directamente.
8
Apertura y cierre de streams
9
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
9
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
fopen
FILE * fopen (const char *filename, const char *opentype);
9
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
fopen
FILE * fopen (const char *filename, const char *opentype);
9
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
fopen
FILE * fopen (const char *filename, const char *opentype);
9
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
10
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
fclose
int fclose (FILE *stream);
10
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
fclose
int fclose (FILE *stream);
10
Apertura y cierre de streams
Las funciones utilizadas para abrir y cerrar archivos son fopen
y fclose
fclose
int fclose (FILE *stream);
10
Apertura y cierre de streams
11
Apertura y cierre de streams
Según el estándar los archivos pueden ser abiertos en modo
texto o en modo binario, para lectura, escritura o ambos.
11
Apertura y cierre de streams
Según el estándar los archivos pueden ser abiertos en modo
texto o en modo binario, para lectura, escritura o ambos.
11
Apertura y cierre de streams
Según el estándar los archivos pueden ser abiertos en modo
texto o en modo binario, para lectura, escritura o ambos.
11
Apertura y cierre de streams
Según el estándar los archivos pueden ser abiertos en modo
texto o en modo binario, para lectura, escritura o ambos.
11
Apertura y cierre de streams
12
Apertura y cierre de streams
Otros modos de apertura son:
12
Apertura y cierre de streams
Otros modos de apertura son:
12
Apertura y cierre de streams
Otros modos de apertura son:
12
Apertura y cierre de streams
13
Apertura y cierre de streams
En modo binario existen los mismos modos, agregando
después de la letra inicial una b
13
Apertura y cierre de streams
En modo binario existen los mismos modos, agregando
después de la letra inicial una b
rb
wb
ab
rb+
wb+
ab+
14
Apertura y cierre de streams
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Apertura y cierre de streams
Ejemplo de redirección de stdout a un archivo
#include <stdio.h>
int main (void)
{
fclose(stdout);
stdout = fopen("salida.txt", "w");
printf("Hola, mundo!\n");
return 0;
}
15
Lectura de streams
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
fgetc
int fgetc ( FILE * stream );
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
fgetc
int fgetc ( FILE * stream );
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
fgets
char *fgets(char *str, int n, FILE *stream);
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
fgets
char *fgets(char *str, int n, FILE *stream);
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
fscanf
int fscanf(FILE *stream, const char *format, ...);
16
Lectura de streams
Descontando las funciones usadas para leer desde stdin, las
funciones usadas para leer desde un archivo en general,
disponibles en stdio.h según el estándar son:
fscanf
int fscanf(FILE *stream, const char *format, ...);
16
Lectura de streams
17
Lectura de streams
Si se tiene un archivo de texto llamado frutas.txt
17
Lectura de streams
Si se tiene un archivo de texto llamado frutas.txt
$ cat frutas.txt
manzana
banana
naranja
pera
$
17
Lectura de streams
18
Lectura de streams
#include <stdio.h>
int main (void)
{
FILE * fp;
char cadena[80] = {0};
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
printf("No se pudo abrir...\n");
return 1;
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
fopen devuelve NULL
int main (void)
{ si el archivo no
FILE * fp;
char cadena[80] = {0}; puede abrirse por
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
algún motivo
printf("No se pudo abrir...\n");
return 1;
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
int main (void)
{
FILE * fp;
char cadena[80] = {0};
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
printf("No se pudo abrir...\n");
return 1;
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
int main (void)
{
FILE * fp;
char cadena[80] = {0};
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
printf("No se pudo abrir...\n");
return 1;
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
debe chequearse la
int main (void)
{ correcta apertura
FILE * fp;
char cadena[80] = {0}; para evitar errores
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
en tiempo de
printf("No se pudo abrir...\n");
return 1;
ejecución
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
int main (void)
{
FILE * fp;
char cadena[80] = {0};
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
printf("No se pudo abrir...\n");
return 1;
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
int main (void)
{
FILE * fp;
char cadena[80] = {0};
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
printf("No se pudo abrir...\n");
return 1;
}
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
#include <stdio.h>
fgets toma hasta
int main (void)
{ 79 (80-1)
FILE * fp;
char cadena[80] = {0}; caracteres. Si
fp = fopen("frutas.txt", "r");
if ( fp == NULL ) {
encuentra un
printf("No se pudo abrir...\n");
return 1;
retorno de línea (\n)
} termina
fgets(cadena, 80, fp);
printf("%s\n", cadena);
fclose(fp);
return 0;
}
18
Lectura de streams
19
Lectura de streams
se puede reemplazar la línea
19
Lectura de streams
se puede reemplazar la línea
...por
19
Lectura de streams
se puede reemplazar la línea
...por
19
Lectura de streams
se puede reemplazar la línea
...por
19
Lectura de streams
20
Lectura de streams
Para leer más líneas se pueden usar sucesivos fscanf o fgets
o utilizar estructuras repetitivas
20
Lectura de streams
Para leer más líneas se pueden usar sucesivos fscanf o fgets
o utilizar estructuras repetitivas
20
Lectura de streams
Para leer más líneas se pueden usar sucesivos fscanf o fgets
o utilizar estructuras repetitivas
20
Escritura de streams
21
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
21
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
fputc
int fputc(int data, FILE * stream);
21
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
fputc
int fputc(int data, FILE * stream);
21
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
21
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
fputs
int fputs(const char * ps, FILE * stream);
22
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
fputs
int fputs(const char * ps, FILE * stream);
22
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
23
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
fprintf
int fprintf(FILE * stream, const char * format, ...);
23
Escritura de streams
Las funciones usadas para escribir en un archivo de texto,
disponibles en stdio.h según el estándar son:
fprintf
int fprintf(FILE * stream, const char * format, ...);
23
Ejemplo Lectura/Escritura de streams
24
Ejemplo Lectura/Escritura de streams
#include <stdio.h>
void agregar(FILE *);
void mostrar(FILE *);
void menu (FILE *);
int menu_option (void);
int main (void) {
FILE *fp;
fp = fopen("db.txt","a+");
menu(fp);
fclose(fp);
return 0;
}
24
Ejemplo Lectura/Escritura de streams
#include <stdio.h>
void agregar(FILE *);
void mostrar(FILE *);
void menu (FILE *);
int menu_option (void);
int main (void) {
FILE *fp;
fp = fopen("db.txt","a+");
menu(fp);
fclose(fp);
return 0;
}
24
Ejemplo Lectura/Escritura de streams
#include <stdio.h>
void agregar(FILE *);
void mostrar(FILE *);
void menu (FILE *);
int menu_option (void);
int main (void) {
FILE *fp;
fp = fopen("db.txt","a+");
menu(fp);
fclose(fp);
return 0;
}
24
Ejemplo Lectura/Escritura de streams
24
Ejemplo Lectura/Escritura de streams
void menu (FILE *fp)
{
int salir = 0;
int op;
do {
op = menu_option();
switch (op) {
case 1:
agregar(fp);
break;
case 2:
mostrar(fp);
break;
case 3:
salir = 1;
break;
default:
printf("Opción no válida\n");
}
} while ( salir == 0 );
}
24
Ejemplo Lectura/Escritura de streams
24
Ejemplo Lectura/Escritura de streams
int menu_option (void)
{
int op;
printf("1-Agregar\n");
printf("2-Mostrar\n");
printf("3-Salir\n");
printf("Que quiere? "); scanf("%d", &op);
return op;
}
24
Ejemplo Lectura/Escritura de streams
24
Ejemplo Lectura/Escritura de streams
void agregar(FILE *fp)
{
int legajo;
char nombre[80];
char apellido[80];
printf("Ingrese el nombre: "); scanf(" %80[^\n]s", nombre);
printf("Ingrese el apellido: "); scanf(" %80[^\n]s", apellido);
printf("Ingrese el legajo: "); scanf("%d", &legajo);
fprintf(fp, "%d %s, %s\n", legajo, apellido, nombre);
}
24
Ejemplo Lectura/Escritura de streams
void agregar(FILE *fp)
{
int legajo;
char nombre[80];
char apellido[80];
printf("Ingrese el nombre: "); scanf(" %80[^\n]s", nombre);
printf("Ingrese el apellido: "); scanf(" %80[^\n]s", apellido);
printf("Ingrese el legajo: "); scanf("%d", &legajo);
fprintf(fp, "%d %s, %s\n", legajo, apellido, nombre);
}
24
Ejemplo Lectura/Escritura de streams
void agregar(FILE *fp)
{
int legajo;
char nombre[80];
char apellido[80];
printf("Ingrese el nombre: "); scanf(" %80[^\n]s", nombre);
printf("Ingrese el apellido: "); scanf(" %80[^\n]s", apellido);
printf("Ingrese el legajo: "); scanf("%d", &legajo);
fprintf(fp, "%d %s, %s\n", legajo, apellido, nombre);
}
24
Ejemplo Lectura/Escritura de streams
24
Ejemplo Lectura/Escritura de streams
void mostrar(FILE *fp)
{
char linea[160];
rewind(fp);
fgets(linea, 160, fp);
while (!feof(fp)) {
fputs(linea, stdout);
fgets(linea, 160, fp);
}
}
24
Ejemplo Lectura/Escritura de streams
void mostrar(FILE *fp)
{
char linea[160];
rewind(fp);
fgets(linea, 160, fp);
while (!feof(fp)) {
fputs(linea, stdout);
fgets(linea, 160, fp);
}
}
24
Ejemplo Lectura/Escritura de streams
void mostrar(FILE *fp)
{
char linea[160];
rewind(fp);
fgets(linea, 160, fp);
while (!feof(fp)) {
fputs(linea, stdout);
fgets(linea, 160, fp);
}
}
24
Archivos binarios
25
Archivos binarios
La diferencia entre los archivos de texto y los binarios es que
los primeros siempre usan caracteres para representar la
información, aunque sean números.
25
Archivos binarios
La diferencia entre los archivos de texto y los binarios es que
los primeros siempre usan caracteres para representar la
información, aunque sean números.
25
Archivos binarios
La diferencia entre los archivos de texto y los binarios es que
los primeros siempre usan caracteres para representar la
información, aunque sean números.
25
Archivos binarios
26
Archivos binarios
La función usada para escribir en un archivo binario,
disponible en stdio.h según el estándar es:
26
Archivos binarios
La función usada para escribir en un archivo binario,
disponible en stdio.h según el estándar es:
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
26
Archivos binarios
La función usada para escribir en un archivo binario,
disponible en stdio.h según el estándar es:
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
26
Archivos binarios
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
$ ls -lh archivo.*
-rw-rw-r-- 1 claudiojpaz claudiojpaz 4 oct 20 19:23 archivo.bin
-rw-rw-r-- 1 claudiojpaz claudiojpaz 7 oct 20 19:23 archivo.txt
$
27
Archivos binarios
FILE * fpt;
FILE * fpb;
int numero = 4000000;
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%d", numero);
fwrite(&numero, sizeof(numero), 1, fpb);
fclose(fpb);
fclose(fpt);
$ ls -lh archivo.*
-rw-rw-r-- 1 claudiojpaz claudiojpaz 4 oct 20 19:23 archivo.bin
-rw-rw-r-- 1 claudiojpaz claudiojpaz 7 oct 20 19:23 archivo.txt
$
27
Archivos binarios
28
Archivos binarios
FILE * fpt;
FILE * fpb;
char cadena[80] = "Texto Vs Binario";
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%s", cadena);
fwrite(cadena, sizeof(cadena), 1, fpb);
fclose(fpb);
fclose(fpt);
28
Archivos binarios
FILE * fpt;
FILE * fpb;
char cadena[80] = "Texto Vs Binario";
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%s", cadena);
fwrite(cadena, sizeof(cadena), 1, fpb);
fclose(fpb);
fclose(fpt);
$ ls -lh archivo.*
-rw-rw-r-- 1 claudiojpaz claudiojpaz 80 oct 20 23:37 archivo.bin
-rw-rw-r-- 1 claudiojpaz claudiojpaz 16 oct 20 23:37 archivo.txt
$
28
Archivos binarios
FILE * fpt;
FILE * fpb;
char cadena[80] = "Texto Vs Binario";
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%s", cadena);
fwrite(cadena, sizeof(cadena), 1, fpb);
fclose(fpb);
fclose(fpt);
$ ls -lh archivo.*
-rw-rw-r-- 1 claudiojpaz claudiojpaz 80 oct 20 23:37 archivo.bin
-rw-rw-r-- 1 claudiojpaz claudiojpaz 16 oct 20 23:37 archivo.txt
$
28
Archivos binarios
FILE * fpt;
FILE * fpb;
char cadena[80] = "Texto Vs Binario";
fpt = fopen("archivo.txt", "w");
fpb = fopen("archivo.bin", "wb");
fprintf(fpt, "%s", cadena);
fwrite(cadena, sizeof(cadena), 1, fpb);
fclose(fpb);
fclose(fpt);
$ ls -lh archivo.*
-rw-rw-r-- 1 claudiojpaz claudiojpaz 80 oct 20 23:37 archivo.bin
-rw-rw-r-- 1 claudiojpaz claudiojpaz 16 oct 20 23:37 archivo.txt
$
28
Archivos binarios
29
Archivos binarios
La ventaja principal del uso de archivos en modo binario es
que cada registro ocupa largo fijo.
29
Archivos binarios
La ventaja principal del uso de archivos en modo binario es
que cada registro ocupa largo fijo.
29
Archivos binarios
La ventaja principal del uso de archivos en modo binario es
que cada registro ocupa largo fijo.
29
Archivos binarios
30
Archivos binarios
La función usada para leer de un archivo binario, disponible en
stdio.h según el estándar es:
30
Archivos binarios
La función usada para leer de un archivo binario, disponible en
stdio.h según el estándar es:
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
30
Archivos binarios
La función usada para leer de un archivo binario, disponible en
stdio.h según el estándar es:
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
30
Archivos binarios
31
Archivos binarios
La otra función más usada en un archivo binario, disponible en
stdio.h según el estándar es:
31
Archivos binarios
La otra función más usada en un archivo binario, disponible en
stdio.h según el estándar es:
fseek
int fseek(FILE *stream, long int offset, int whence);
31
Archivos binarios
La otra función más usada en un archivo binario, disponible en
stdio.h según el estándar es:
fseek
int fseek(FILE *stream, long int offset, int whence);
31
Archivos binarios
La otra función más usada en un archivo binario, disponible en
stdio.h según el estándar es:
fseek
int fseek(FILE *stream, long int offset, int whence);
31
Archivos binarios
La otra función más usada en un archivo binario, disponible en
stdio.h según el estándar es:
fseek
int fseek(FILE *stream, long int offset, int whence);
31
Acceso aleatorio
32
Acceso aleatorio
Supongamos que queremos llevar una base de datos con 10
estudiantes, donde cada uno cuenta con un código, un
nombre y una nota.
32
Acceso aleatorio
Supongamos que queremos llevar una base de datos con 10
estudiantes, donde cada uno cuenta con un código, un
nombre y una nota.
struct estudiante {
int cod;
char nombre[40];
int nota;
};
32
Acceso aleatorio
Supongamos que queremos llevar una base de datos con 10
estudiantes, donde cada uno cuenta con un código, un
nombre y una nota.
struct estudiante {
int cod;
char nombre[40];
int nota;
};
32
Acceso aleatorio
33
Acceso aleatorio
Primero se crea un archivo en modo binario
33
Acceso aleatorio
Primero se crea un archivo en modo binario
FILE *fp;
fp = fopen("base.bin", "wb");
33
Acceso aleatorio
Primero se crea un archivo en modo binario
FILE *fp;
fp = fopen("base.bin", "wb");
33
Acceso aleatorio
34
Acceso aleatorio
Luego con fwrite se escriben los 10 registros (o los que se
necesiten) para almacenar los estudiantes
34
Acceso aleatorio
Luego con fwrite se escriben los 10 registros (o los que se
necesiten) para almacenar los estudiantes
34
Acceso aleatorio
Luego con fwrite se escriben los 10 registros (o los que se
necesiten) para almacenar los estudiantes
34
Acceso aleatorio
35
Acceso aleatorio
Para leer todos los registros se puede obtener un bloque
completo (los 10 registros) y luego recorrer el arreglo en
memoria
FILE *fpb;
struct estudiante e[10] = {0};
fpb = fopen("archivo.bin", "rb");
fread(e, sizeof(struct estudiante), 10, fpb);
for (int i = 0; i < 10; i++)
printf("%d %s %d\n", e[i].legajo, e[i].nombre, e[i].nota);
fclose(fpb);
35
Acceso aleatorio
36
Acceso aleatorio
Para leer solo un registro en particular se usa fseek
FILE *fpb;
struct estudiante e = {0};
int n;
fpb = fopen("archivo.bin", "rb+");
printf("Que registro quiere ver? ");
scanf("%d", &n);
fseek(fpb, n*sizeof(struct estudiante), SEEK_SET);
fread(&e, sizeof(struct estudiante), 1, fpb);
printf("%d %s %d\n", e.legajo, e.nombre, e.nota);
fclose(fpb);
36
Acceso aleatorio
37
Acceso aleatorio
También con fseek se puede posicionar para cambiar un
registro en particular
37
Acceso aleatorio
38
Acceso aleatorio
Una vez que se lee la estructura, luego de modificarla hay que
volver a colocarla en el archivo para que queden registrados
los cambios.
38
Acceso aleatorio
Una vez que se lee la estructura, luego de modificarla hay que
volver a colocarla en el archivo para que queden registrados
los cambios.
38