Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEIT
DGIT
TABLA DE CONTENIDO
Pg.
Tabla de figuras....
Prefacio...
8
8
9
10
12
16
17
18
18
19
20
20
22
22
23
24
26
26
26
27
28
29
29
31
31
31
32
34
34
35
35
36
38
38
39
40
40
42
43
43
43
44
44
46
47
47
49
50
51
53
54
56
57
57
57
59
60
60
62
63
63
67
69
4.- CONCLUSIONES.......................................
71
5.-BIBLIOGRAFA...............................................
72
65
66
TABLA DE FIGURAS
No. Descripcin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Pg.
9
11
11
12
13
17
18
20
21
22
23
23
24
25
27
28
29
30
33
33
34
34
36
37
39
41
42
43
45
46
48
49
52
53
55
56
58
59
61
62
5
64
65
68
69
PREFACIO
conocer
las
clasificaciones
generales
las
operaciones
Microprocesador
ALU
Unidad
de
Control
Proceso de grabar
datos en el archivo
Registros
Archivo
Proceso de cargar
datos a la memoria
10
No_prod Descrip
Cantidad
Precio
Garantia
Entero
Entero
Real
Caracter
Cadena [30]
struct tipo_registro
{
int no_prod;
char descrip[30];
int cantidad;
float precio;
char garantia;
Ntese
ubicacin
smbolo ;
la
del
};
struct tipo_registro Registro;
Declaracin de la variable
Registro
de
tipo
tipo_registro
11
Archivo: PRODUCTO.SEC
Descrip
Cantidad
Precio
Garantia
Camisa de vestir
100
65.80
234
115.50
Radiograbadora
36
895.75
54
1532.60
Entero
Cadena [30]
Entero
Real
Caracter
Registros
No_prod
Campos
muestran
las
siguientes
12
Operacin o accin
Archivero
Archivo computacional
carpetas
con
la la informacin que se
informacin
que
solicita,
que
ya
archivos
clasificados
identificados
e Profesores, alumnos y
materias
estn
correlacionados.
Regularmente
contengan
donde se encuentra la
informacin
particular y no de varios.
P. Ejem. Slo datos de
ALUMNOS.
13
pueden
colocar Los
nombres
de
los
archiveros
regularmente
se
la principal y su extensin,
clasificacin
de
usuario
colocarle
la
puede
extensin
tanto
el
nombre
un
archivero
se Bsicamente un archivo
Lectura
las carpetas.
Escritura
realizan
como
consecuencia de stas.
14
requiere
agregar
consultar
carpetas
o de
un
archivo
es
modos
de
de
las
operaciones
que
se
deseen realizar en l.
Los
cajones
de
carpetas.
de
esto
insercin
la muestre
para
ciertas
estas
formas
de
almacenamiento se
les
conoce
como
organizacin
del
archivo.
15
es
cach
almacenar
informacin.
Algunos
Seguridad
se
y
archiveros Dependiendo
del
operativo,
se
aplicar
de
archivos dependiendo de
los usuarios; es decir, se
establecen polticas de
acceso a usuarios.
16
Programa de
archivos
Nombre de archivo
Lectura / Escritura
Sistema Operativo
Apuntador a
estruct. de archivo
(alias)
Las operaciones en
archivos se realizan
por medio de su alias.
Archivo
17
Texto
Clasificacin de archivos por contenido
Binarios
3.141592 3.141592
18
19
Secuenciales
Clasificacin de archivos por
tipo de acceso
Directos (relativos o aleatorios)
En esta rutina se
20
CONSULTA SECUENCIAL
alias=OPEN
(PRODUCTO.SEC)
READ
V
alias=
NULL
El archivo
no existe
return
F
No prod
Lectura
del
registro
completo
del
archivo
controlado por alias
READ
(Registro,alias)
F
WHILE
NOT EOF
(alias)
Ciclo mientras no se
encuentre el final del
archivo
No se encontr
el registro
CLOSE
(alias)
V
V
Registro.no_prod
=
no_prod
Registro.no prod,
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
21
Tipo de dato
Tamao en bytes
no_prod
Int
Descrip
Cantidad
char [30]
int
Precio
float
Garantia
char
2
30
2
TOTAL
39
22
Archivo: PRODUCTO.SEC
Dir.
Dir.
Lg.
Fs.
No_prod
Descrip
Cantidad
Precio
Garantia
Camisa de vestir
100
65.80
41
234
115.50
82
Radiograbadora
36
895.75
123
54
1532.60
164
205
Entero
Cadena [30]
Entero
Real
Caracter
23
24
alias=OPEN
(PRODUCTO.SEC)
READ
V
alias=
NULL
El archivo
no existe
F
No prod
return
Validacin de la
existencia del
archivo
Clculo de la
direccin
fsica
SEEK
(dir_fisica,alias)
READ
(Registro,alias)
Registro.no prod,
Registro.descrip,
Registro.cantidad,
Registro.precio,
Registro.garantia
Posicionarse en la direccin
fsica
Lectura
del
registro
completo
del
archivo
controlado por alias
CLOSE
(alias)
Cierre del archivo
return
25
#include <stdio.h>
adems es necesario declarar una variable de tipo FILE que opere como el
apuntador a la estructura del archivo (alias), esto se logra con la sig. lnea:
FILE *alias;
26
Modo de
apertura
apertura
(archivos de
(archivos
texto)
binarios)
rb
Operacin
wb
ab
r+
rb+
w+
wb+
a+
ab+
27
28
#include <stdio.h>
29
struct tipo_registro
{
int no_prod;
char descrip[30];
int cantidad;
float precio;
char garantia;
};
struct tipo_registro Registro;
Variable que se desea
grabar (registro)
Note la presencia de
&
Declaracin de la variable
Registro
de
tipo
tipo_registro
alias del
archivo donde
se desea grabar
30
31
32
SEEK_SET
Puntos
de
referencia
Modo
Nombre
SEEK_CUR
SEEK_END
Operacin
Punto de
referencia
Se debe calcular la direccin fsica antes
de reposicionar el apuntador del archivo
33
alias del
archivo
dir_fisica = ftell(alias);
La variable dir_fisica
debe ser declarada
como long int
34
rewind(alias);
La funcin rewind devuelve
el apuntador del archivo al
principio sin necesidad de
la funcin fseek
35
rename(c:\\tarea\\VIEJO.OLD, c:\\tarea\\NUEVO.NEW);
36
remove(c:\\tarea\\VIEJO.OLD);
37
38
struct tipo_registro
{
int no_prod;
char descrip[30];
int cantidad;
float precio;
char garantia;
};
struct tipo_registro Registro;
Declaracin de la variable
Registro
de
tipo
tipo_registro
FILE *alias;
void main(void)
{
.
}
39
40
ALTA SECUENCIAL
alias=OPEN
(PRODUCTO.SEC)
READ/WRITE
alias=OPEN
(PRODUCTO.SEC)
WRITE
alias=
NULL
F
no prod
READ
(Registro,alias)
Ciclo mientras no se
encuentre el final del
archivo
F
WHILE
NOT EOF
(alias)
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
Registro.no_prod
=
no_prod
V
V
Registro.no_prod
=
no_prod
Registro
duplicado
WRITE
(Registro,
alias)
CLOSE
(alias)
READ
(Registro,alias)
return
41
42
43
44
LISTADO SECUENCIAL
alias=OPEN
(PRODUCTO.SEC)
READ
V
alias=
NULL
El archivo
no existe
return
F
Lectura
del
registro
del
archivo
completo
controlado por alias
READ
(Registro,alias)
R
Ciclo mientras no se
encuentre el final del
archivo
F
WHILE
NOT EOF
(alias)
CLOSE
(alias)
V
Registro.no prod,
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
READ
(Registro,alias)
45
void LISTADO_SECUENCIAL(void)
{
clrscr();
cout << "\n\rLISTADO DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb"); // Intenta abrir el archivo
PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\rNo Prod
Descripcion Cantidad
Precio Garantia";
cout << "\n\r-----------------------------------------------------------------------";
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
archivo
{
printf("\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c",Registro.no_prod,Registro.descr
ip,
Registro.cantidad,Registro.precio,Registro.garantia);
fread(&Registro,sizeof(Registro),1,alias);
}
fclose(alias); // Cierra el archivo
cout << "\n\r-----------------------------------------------------------------------";
cout << "\n\rFin del listado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
46
47
MODIFICACION SECUENCIAL
alias=OPEN
(PRODUCTO.SEC)
READ/WRITE
V
alias=
NULL
El archivo
no existe
return
F
No prod
Lectura
del
registro
del
archivo
completo
controlado por alias
READ
(Registro,alias)
F
WHILE
NOT EOF
(alias)
Ciclo mientras no se
encuentre el final del
archivo
No se encontr
el registro
CLOSE
(alias)
V
V
Registro.no_prod
=
no_prod
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
SEEK
(FTELL(alias)sizeof(Registro)
,alias)
READ
(Registro,alias)
WRITE
(Registro,alias)
48
49
el
con
// los nuevos campos
fclose(alias);
// Cierra el archivo
cout << "\n\n\n\rRegistro modificado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
50
51
alias=OPEN
(PRODUCTO.SEC)
READ/WRITE
V
alias=
NULL
El archivo
no existe
return
F
No_prod
Lectura
del
registro
del
archivo
completo
controlado por alias
READ
(Registro,alias)
R
F
WHILE
NOT EOF
(alias)
No se encontr
el registro
CLOSE
(alias)
V
V
Registro.no_prod
=
no_prod
Registro.no prod=0
Registro.descrip=
Registro.cantidad=0
Registro.precio=0.0
Registro.garantia=
SEEK
(FTELL(alias)sizeof(Registro)
,alias)
READ
(Registro,alias)
WRITE
(Registro,alias)
52
53
el
con
// apuntador
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
// los nuevos campos
cout << "\n\n\n\rRegistro eliminado !!!";
}
fclose(alias);
// Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
54
BAJA_FISICA_SECUENCIAL
alias=OPEN
(PRODUCTO.SEC)
READ
V
alias=
NULL
El archivo
no existe
F
temporal=OPEN
(TEMPORAL.TMP)
WRITE
return
READ
(Registro,alias)
RENAME
TEMPORAL.TMP
AS
PRODUCTO.SEC
F
WHILE
NOT EOF
(alias)
CLOSEALL
DELETE
(PRODUCTO.SEC)
V
V
Registro.no_prod
<>
0
F
READ
(Registro,alias)
Grabar el registro en el
archivo temporal
55
56
57
ALTA DIRECTA
alias=OPEN
(PRODUCTO.DIR)
READ/WRITE
alias=OPEN
(PRODUCTO.DIR)
WRITE
alias=
NULL
F
Clculo de la direccin
fsica
no prod
SEEK
(dir_fisica,alias)
READ
(Registro,alias)
return
V
Registro.no_prod
=
no_prod
Registro
duplicado
CLOSE
(alias)
F
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
Registro.no_prod
=
no_prod
WRITE
(Registro,alias)
SEEK
(dir_fisica,alias)
58
59
return;
60
CONSULTA DIRECTA
alias=OPEN
(PRODUCTO.DIR)
READ
Valida la existencia
del archivo
V
no existe el
archivo
alias=
NULL
F
Clculo de la direccin
fsica
no prod
SEEK
(dir_fisica,alias)
Posicionar el apuntador
del archivo
READ
(Registro,alias)
V
Registro.no_prod
=
no_prod
Registro.no prod,
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
F
CLOSE
(alias)
No existe
ese registro
R
return
61
62
63
MODIFICACION DIRECTA
alias=OPEN
(PRODUCTO.DIR)
READ/WRITE
V
alias=
NULL
El archivo
no existe
return
F
Clculo de la direccin
fsica
No prod
SEEK
(dir_fisica,alias)
Lectura
del
registro
completo
del
archivo
controlado por alias
READ
(Registro,alias)
Registro.no_prod
=
no_prod
Registro.no prod,
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
F
No existe ese
registro
SEEK
(ftell(alias)sizeof(Registro)
,alias)
CLOSE
(alias)
64
65
66
67
alias=OPEN
(PRODUCTO.DIR)
READ/WRITE
V
alias=
NULL
El archivo
no existe
return
F
Clculo de la direccin
fsica
No prod
READ
(Registro,alias)
Registro.no_prod
=
no_prod
Registro.no prod=0
Registro.descrip=
Registro.cantidad=0
Registro.preci=0.0
Registro.garantia=
F
No existe ese
registro
CLOSE
(alias)
SEEK
(ftell(alias)sizeof(Registro)
,alias)
WRITE
(Registro,alias)
68
69
-> ";
// apuntador
do
{
cout << "\n\rEsta seguro que desea eliminar este registro? [S/N] --
op=toupper(getche());
}while(op!='S' && op!='N');
if(op=='S')
{
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del
archivo
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
con
// los nuevos campos
cout << "\n\n\n\rRegistro eliminado logicamente !!!";
}
else
{
cout << "\n\n\n\rRegistro NO eliminado !!!";
}
fclose(alias);
// Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
else
{
cout << "\n\n\n\rNo se encuentra ese registro !!!";
}
fclose(alias); // Cierra el archivo
cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
70
4. CONCLUSIONES
Aunque existe una gran diversidad de aplicaciones que se pueden desarrollar
con manejo de archivos que pueden ser sumamente completas y complejas, estos
apuntes presentan, de una forma sencilla y comprensible, los aspectos bsicos de
programacin de archivos usando lenguaje C++. De tal forma, que no presenta
lgica abrumadora de control de detalles, sino la base fundamental del material es
entender y utilizar las funciones bsicas de manejo de archivos en este lenguaje
para posteriormente usarlas en el curso de Administracin de Archivos y en
cursos posteriores.
Cabe destacar que la codificacin de las rutinas que se muestran se pueden
obtener en forma ntegra en el sitio http://www.itnuevolaredo.edu.mx/takeyas y
ejecutarse para reafirmar el contenido.
71
5. BIBLIOGRAFIA
72