Вы находитесь на странице: 1из 111

Procesamiento

De
Archivos
En C++:
<fstream>

V3.0
Ferreiras
Octubre 2009
1
¿ QUÉ ES UN ARCHIVO ?

 UN PAQUETE DE INFORMACIÓN
DIGITAL IDENTIFICADO COMO
nombre.extension, GRABADO EN UN
DISPOSITIVO DE ALMACENAMIENTO
MASIVO Y PERMANENTE Y QUE PUEDE
SER RECUPERADO.

2
 HASTA AHORA SOLO HEMOS
MANEJADO DATOS ALMACENADOS EN:
 VARIABLES
 ARREGLOS <VECTOR>

3
 LAS VARIABLES Y LOS ARREGLOS
SON TODOS MEDIOS VOLÁTILES DE
ALMACENAMIENTO PORQUE SON
CREADOS Y PROCESADOS EN RAM.

 PARA ALMACENAR DATOS DE


MANERA PERSISTENTE USAMOS LOS
ARCHIVOS;

4
UN ARCHIVO DE
COMPUTADORA
 A BAJO NIVEL ES, SIMPLEMENTE,
UNA SECUENCIA UNIDIMENSIONAL DE
BYTES; OTRO NOMBRE ES “ARCHIVO
DIGITAL”:

byte0 byte1 byte2 byte3 byte4 

5
 A UN ALTO NIVEL, CONSIDERANDO
EL CONTENIDO, LOS BYTES PUEDEN
REPRESENTAR:
♦ NUMEROS ENTEROS,
♦ NUMEROS REALES,
♦ CARACTERES,
♦ PIXELES,
♦ SONIDO,
...
6
 El formato de los bytes consiste en
codificar de manera apropiada la
información almacenada en el archivo. Es lo
que se conoce como formateo de
archivos. Dicho formato podrá ser público o
privado, protegido por las leyes de derechos
de patentes.

7
 Cada programa, software o aplicación
crea sus archivos con su formato propio,
pudiendo variar, incluso, de una versión a
otra del mismo software ( Por Ejemplo, los
archivos de MS Office 2007 necesitan ser
convertidos previamente para ser
procesados con MS Office 2003, digamos
xlsx a xls, en Excel).

8
 Normalmente, la extensión en el nombre
del archivo indicará su formato. Por Ejemplo:

 TXT ⇒ Texto ASCII STD;


 BIN ⇒ Archivo binario
 JPEG ⇒ Imágenes fotográficas estáticas;
 GIF ⇒ Imágenes y animaciones simples;
 QuickTime ⇒ Multimedia;
 ZIP ⇒ Archivo comprimido
 ...
9
 Para información de extensiones de
archivo ver en el link:
http://whatis.techtarget.com/file-extension-list-A/0,289933,sid9,00.html

"Every File Extension in the World"


This is a list of file extension names or suffixes that
indicate the format or usage of a file and a brief
description of that file extension. In general, if you have
the program that uses that file extension, that program
can be used to open or otherwise use the file.

Y, además, en http://www.wotsit.org/
10
 Puesto que un byte da la
posibilidad de 256 combinaciones
diferentes ( 28 = 256) que están en el
rango desde 0 hasta 255, [0, 255],
cada programa, software o aplicación
establecerá el uso de estas para
codificar y decodificar los bytes
almacenados en sus archivos;

11
 El Desarrollador de formatos de
archivos es el profesional de la TIC
responsable del desarrollo de
especificaciones de formatos de archivos.
Su conocimiento de C-C++ y ASML es
fundamental para su trabajo. Ver un
ejemplo en el link:
http://www.itee.uq.edu.au/~cristina/students/david/honoursThesis96/bff.htm

12
 UN ARCHIVO ES ALMACENADO EN
UN DISPOSITIVO DE
ALMACENAMIENTO MASIVO Y
PERMANENTE ( MEMORIA
SECUNDARIA, ...):
♦ DISCO DURO, CD, DVD, BRD, HVD,
OM, 3DD, MEMORIA FLASH, ... ;

13
 UN ARCHIVO ES PERMANENTE,
ESTO ES, PUEDE SER RECUPERADO
(LEIDO) EN CUALQUIER MOMENTO;

 UN ARCHIVO DEBE SER ABIERTO


PREVIO A SU USO Y CERRADO LUEGO
DE SER USADO;

14
 UN ARCHIVO PUEDE SER USADO,
PARA PROVEER DATOS DE ENTRADA A
UN PROGRAMA O PARA RECIBIR
DATOS DE SALIDA DE UN PROGRAMA;
O PARA AMBAS COSAS:

DISPOSITIO DE
BUFFER E/S PROGRAMA
ALMACENAMIENTO

15
PROCESAMIENTO DE
ARCHIVOS
 Las operaciones típicas del procesamiento de archivo son:
 Creación del archivo con un nombre especificado;
 Establecer los atributos que controlan las operaciones sobre el
archivo;
 Abrir el archivo para usar su contenido;
 Lectura o actualización de su contenido;
 Grabar a un dispositivo de almacenamiento permanente el
contenido actualizado;
 Cerrar el archivo, con lo cual se pierde la posibilidad de su acceso
hasta que sea abierto de nuevo.

16
PUNTERO DE POSICIÓN EN EL
INTERIOR DEL ARCHIVO
 ES UN NUMERO ENTERO POSITIVO
QUE INDICA EL PRÓXIMO BYTE A SER
LEÍDO O ESCRITO.

byte0 byte1 byte2 byte3 byte4 

Próximo byte a 4
ser leído o
escrito

17
 EL PUNTERO DE POSICIÓN EN EL INTERIOR
DEL ARCHIVO ESPECIFICA LA UBICACIÓN EN
EL ARCHIVO COMO UN NUMERO DE BYTES
DESDE LA UBICACIÓN INICIAL DEL ARCHIVO
(TAMBIÉN SE LE CONOCE COMO
DESPLAZAMIENTO DESDE EL INICIO DEL
ARCHIVO):
byte0 byte1 byte2 byte3 byte4 

DESPLAZAMIENTO DE 5 BYTES
18
 CUANDO SE ABRE O SE CREA UN
ARCHIVO ESTE PUNTERO ES CREADO
APUNTANDO A UNA POSICIÓN SEGÚN
LO INDICADO POR EL MODO DE
APERTURA;

 CUALQUIER OPERACIÓN DE ESCRITURA O


LECTURA ACTUALIZARÁ ESTE PUNTERO A
UNA POSICIÓN CORRESPONDIENTE SEGÚN LA
CANTIDAD DE BYTES PROCESADOS.

19
RECORDAR QUE ES UN FLUJO
 UNA SECUENCIA DE
CARACTERES (BYTES) QUE PUEDE
SER:
 DE ENTRADA: PUEDE VENIR
DESDE UN TECLADO, ARCHIVO,
UN PROCESO, CUALQUIER OTRO
DISPOSITIVO DE ENTRADA;

20
 DE SALIDA: CUANDO VA
DESTINADO A UN ARCHIVO, A UNA
PANTALLA, A UNA IMPRESORA O
CUALQUIER OTRO DISPOSITIVO DE
SALIDA.

 C++ LO QUE REALMENTE VE Y


PROCESA SON FLUJOS DE
BYTES;

21
¿QUE ES UN ARCHIVO PARA C++ ?

 UNA SECUENCIA DE BYTES


NUMERADOS A PARTIR DE 0, CADA UNO DE
LOS CUALES PUEDE SER LEÍDO
INDIVIDUALMENTE:
0 1 2 3 4 5 6 7 8 ...
...

BYTES DE INFORMACIÓN
22
¿ COMO INTERPRETAR LOS
BYTES DE INFORMACIÓN ?
 LO ESTABLECE EL FORMATO DEL
ARCHIVO: UN CONJUNTO DE
REGLAS QUE DETERMINAN QUÉ
SIGNIFICA CADA BYTE, ESTO ES, SI
ES UN ARCHIVO DE TEXTO O
UN ARCHIVO BINARIO.

23
ARCHIVOS DE TEXTO
 CADA BYTE REPRESENTA UN
CARÁCTER ASCII-STD;
 ES UN ARCHIVO SECUENCIAL NO
FORMATEADO;
 PUEDEN SER ABIERTOS, LEÍDOS Y
EDITADOS CON CUALQUIER EDITOR DE
TEXTO ( notepad, edit, vi, ...)

24
ARCHIVOS BINARIOS
 CADA BYTE CONTIENE UN VALOR EN
EL RANGO [0, 255] Y CON SIGNIFICADO
ÚNICO.

 PODEMOS ALMACENAR TIPOS DE


DATOS int, double, bool, string,...

 EN C++ SON SIMILARES A LOS


ARREGLOS DE REGISTROS;
25
 LOS ARCHIVOS ASCII SON UN
TIPO ESPECIAL DE LOS ARCHIVOS
BINARIOS DONDE CADA BYTE
REPRESENTA UN CÓDIGO ASCII-8
STD;

 PUEDEN ALMACENAR IMÁGENES,


SONIDOS, VERSIONES COMPRIMIDAS
DE OTROS ARCHIVOS, ETC , EN FIN,
CUALQUIER TIPO DE CONTENIDO DE
ARCHIVO.
26
 TIENEN CARACTERÍSTICAS
FUNDAMENTALES QUE LOS
DIFERENCIAS DE LOS ARCHIVOS
ASCII:

 SON LONGITUD FIJA;


 SON DE ACCESO ALEATORIO ;
 EL CONTENIDO DE UN REGISTRO SE
PUEDE CAMBIAR DENTRO DEL MISMO
ARCHIVO;

27
PASOS GENERALES PARA EL
USO DE UN ARCHIVO
 DECLARAR UNA VARIABLE DE ARCHIVO;
 ASOCIAR LA VARIABLE DE ARCHIVO A UN
ARCHIVO ALMACENADO EN UN DISPOSITIVO;
 ABRIR EL ARCHIVO;
 USAR EL ARCHIVO;
 CERRAR EL ARCHIVO;

28
PASOS ESPECIFICOS PARA
PROCESAR ARCHIVOS CON
<fstream>
 ABRIR EL ARCHIVO DEFINIENDO UN FLUJO
NUEVO ASOCIADO A ESTE Y ESPECIFICANDO
SI ES PARA LECTURA O PARA ESCRITURA;
 USAR EL ARCHIVO; Aunque <fstream> contiene
un recurso que cierra el
 CERRAR EL ARCHIVO; archivo antes de terminar la
ejecución es
recomendable hacerlo de
manera explícita.

29
MODOS DE ABRIR UN ARCHIVO

MODO DESCRIPCIÓN
ios::in para lectura
ios::out para escritura
ios::app Llama ios::out y escribe al final del archivo
ios::ate No llama ios::out, escribe al final del archivo
ios::trunc Borra todo el contenido actual del archivo
ios::nocreate Si el archivo no existe, retorna un error
ios::noreplace Si el archivo existe, no lo reemplaza
ios::binary Para crear archivos binarios
Para establecer mas de un modo de apertura usar el carácter |. Por
ejemplo: ios::app | ios::noreplace

30
ORIGEN DE LOS RECURSOS EN
<fstream>
ios

istream ostream

iostream ofstream
ifstream

fstream

31
 fstream ADQUIERE POR HERENCIA
TODOS LOS RECURSOS DISPONIBLES
EN ios, istream, ostream, ifstream,
ofstream y iostream, COMO ES
MOSTRADO EN LA FIGURA ANTERIOR.

32
 LOS RECURSOS EN <fstream> SON:

RECURSO DESCRIPCIÓN
open() conecta un flujo con un archivo en un dispositivo de
almacenamiento
get() extraer el próximo carácter de un flujo de entrada
eof() prueba por el fin de un archivo
put() inserta un carácter en un flujo de salida
close() desconecta un flujo del dispositivo asociado
LA FORMA GENERAL DE USO SE MUESTRA EN LOS SIGUIENTES
EJEMPLOS.

33
FORMATO DE USO DE
<fstream>
fstream id_buffer( id_archivo, modo_apertura1, | modo_apertura2 | ...);

 Abre un archivo para su procesamiento.


Donde:
id_buffer Es un buffer que se asocia al id_archivo;

id_archivo Es el nombre del archivo


modo_apertura1, Son modos de apertura como antes
modo_apertura2, .. indicado en la diapositiva #
.
34
FLUJOS <fstream>
SE DEBE ESPECIFICAR QUE ES
PARA ESCRITURA. ESCRIBIR
#include <fstream>
using namespace std; PROGRAMA
int main(void){
fstream escribir(“arch1.dat”, ios::out, ... ); arch1

....
return 0;
buffer
}

Aquí se especifica si es un archivo binario;


Por defecto, C++ lo trata como archivo de
texto ASCII. Ver ejemplos más adelante.

35
SE DEBE ESPECIFICAR QUE ES
PARA LECTURA
LEER
#include <fstream>
using namespace std;
PROGRAMA
int main(void){
fstream leer(“arch2.dat”, ios::in, ... );
arch1
....
return 0;
} buffer

Aquí se especifica si es un archivo binario;


Por defecto, C++ lo trata como archivo de
texto ASCII. Ver ejemplos más adelante.

36
MANEJO DE ARCHIVOS
SECUENCIALES
(ARCHIVOS DE TEXTO ASCII),
CON <fstream> EN C++

 POR DEFAULT LOS ARCHIVOS


ABREN COMO ARCHIVOS DE
TEXTO ASCII-8 STD;

37
 USAR EL OPERADOR DE INSERCIÓN
<< Ó LA FUNCIÓN put() PARA ESCRIBIR
LOS REGISTROS;
 USAR EL OPERADOR DE
EXTRACCIÓN >> Ó LAS FUNCIONES
get(), getline(id_buffer, cadena, [delimi])
PARA LEER LOS REGISTROS;

38
 Ejemplo de escritura usando el
operador de inserción <<
/*
asescr0.cpp
Compilador: bcc32 5.5

C++ / Ferreiras / Procesamiento de archivos en C++ /

Archivos secuenciales o archivos de texto ASCII /

Escritura usando el operador de insercion <<

Ejemplo simple, muy simple.

*/

39
#include <fstream>
using namespace std;

int main(void){
fstream escribir("fff.dat", ios::out);
escribir << endl << "Escritura de archivo de texto" << endl;
escribir << endl << "Usando los recursos de fstream" << endl;
escribir.close();
return 0;
}

Crea el archivo fff.dat y lo abre


para escritura. Cada vez que se
corra borra fff.dat y lo crea de
nuevo. Otros métodos mas
adelante.

40
C:\Borland\BCC55\Bin>asescr0

C:\Borland\BCC55\Bin> type fff.dat

Escritura de archivo de texto

Usando los recursos de fstream

=> TAREA: Quite los endl y verifique todo.

41
 Otro ejemplo de escritura usando el
operador de inserción <<

/*
asescr0a.cpp
Compilador: bcc32 5.5

C++ / Ferreiras/ Archivos/ Archivos ASCII-8 std

- Escritura con el operador de insercion <<


- Uso de ios::app y ios::noreplace

*/

42
#include <fstream>
using namespace std;

int main(void){

fstream escribir("arch1.dat", ios::app | ios::noreplace );


escribir << "\nEscritura de archivo de texto\n";
escribir.close();
return 0;
}

43
NOTA: Cada vez que corro asescr0a se agrega un
registro al archivo arch1.dat

C:\Borland\BCC55\Bin>asescr0a

C:\Borland\BCC55\Bin>asescr0a

C:\Borland\BCC55\Bin>asescr0a

C:\Borland\BCC55\Bin>asescr0a

C:\Borland\BCC55\Bin>asescr0a

C:\Borland\BCC55\Bin>asescr0a

44
C:\Borland\BCC55\Bin> type arch1.dat

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

45
 Otro ejemplo de escritura usando el
operador de inserción <<
/*
asescr0b.cpp
Compilador: bcc32 5.5

C++ / Ferreiras / Archivos de texto ascii-std

Escritura con el operador de insercion <<

Ejemplo desde un <vector>

*/

46
#include <fstream>
#include <iomanip>
#include <vector>

using namespace std;

int main(void){

fstream Escritura("salida.dat");
vector<float> num(10, 5.5);

47
Escritura.precision(2);
for( unsigned int k(0); k < num.size(); k++ ){
Escritura << setw(5) << (num.at(k) + 1.5*k);
}

Escritura.close();
cout << "\nEL ARCHIVO salida.dat YA ESTA CREADO..."
<< "\n\nPUEDES VER SU CONTENIDO CON type salida.dat"
<< endl << endl;

return 0;
}

48
/*

C:\Borland\BCC55\Bin>asescr0b

==> Para ver el contenido grabado en el archivo salida.dat

usando type:

C:\Borland\BCC55\Bin>type salida.dat

5.5 7 8.5 10 12 13 14 16 18 19

*/

49
 Ejemplo de escritura usando put()

/*
asput0.cpp
Compilador: bcc32 5.5

C++ / Ferreiras / Manejo de archivos en C++ con <fstream>

Archivos secuenciales/ Escitura con put

*/

50
#include <fstream>
using namespace std;

int main(void){

fstream escribir("ggg.dat", ios::out);


char c;
system("cls");
cout << "\n=> Entre un caracter, para terminar CTRL+Z:\n\n";
while(cin >> c){
escribir.put(c);
}

escribir.close();
return 0;

51
C:\Borland\BCC55\Bin> asput0

=> Entre un caracter, para terminar CTRL+Z:

#
&
(
)
F
E
^Z
^Z

C:\Borland\BCC55\Bin>type ggg.dat

#&()FE

C:\Borland\BCC55\Bin>

52
 Ejemplo de lectura usando el
operador de extracción >>
/*
asleer0a.cpp
Compilador: bcc32 5.5

C++ / Ferreiras / Procesamiento de archivos en C++ /

Archivos secuenciales o archivos de texto ASCII /

Lectura con el operador de extraccion >>

Ejemplo simple, muy simple.

*/

53
#include <fstream>
using namespace std;

int main(void){

string palabra;
fstream leer("fff.dat", ios::in);
while(!leer.eof()){
leer >> palabra; // lee palabra por palabra
cout << palabra << endl; // muestra palabra
}
leer.close();
return 0;
}

54
C:\Borland\BCC55\Bin>asleer0a

Escritura
de
archivo
de
texto
Usando
los
recursos
de
fstream
fstream

55
 Ejemplo de lectura con get()

/*
asleer0b.cpp
Compilador: bcc32 5.5

C++ / Ferreiras/ Archivos/ Archivos ASCII-8 std

Lectura con get()

*/

56
#include <fstream>
using namespace std;

int main(void){
fstream leer("arch1.dat", ios::in);
char car;
while( !leer.eof() ){
leer.get(car);
cout << car;
}
leer.close();
return 0;
}

57
==> En este momento arch1.dat solo tiene un registro a leer

C:\Borland\BCC55\Bin>asleer0b

Escritura de archivo de texto

==> Agregamos mas registros

C:\Borland\BCC55\Bin>asescr0a
C:\Borland\BCC55\Bin>asescr0a
C:\Borland\BCC55\Bin>asescr0a
C:\Borland\BCC55\Bin>asescr0a

58
==> En este momento arch1.dat tiene mas de un registro a leer

C:\Borland\BCC55\Bin>asleer0b

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

Escritura de archivo de texto

59
 Ejemplo de lectura usando el recurso
getline

/*
asleer0c.cpp
Compilador: bcc32 5.5

C++ / Ferreiras / Procesamiento de archivos en C++ /

Archivos secuenciales o archivos de texto ASCII /

Lectura usando getline

Ejemplo simple, muy simple.

*/

60
Abre el archivo fff.dat para
int main(void){ lectura sin verificar su
existencia. Otros
string linea; métodos mas
fstream leer("fff.dat", ios::in); adelante.
while(!leer.eof()){
getline(leer, linea);
cout << linea << endl; // quitar endl y probar
}
leer.close();
return 0;
}

61
C:\Borland\BCC55\Bin>asleer0c

Escritura de archivo de texto

Usando los recursos de fstream

==> TAREA: Quitar endl y probar

62
 Otro ejemplo de lectura usando el
recurso getline

/*
asleer0d.cpp
Compilador: bcc32 5.5

C++ / Ferreiras / Procesamiento de archivos en C++ /

Archivos secuenciales o archivos de texto ASCII /

Lectura usando getline y verificacion de apertura

Ejemplo simple, muy simple.

*/

63
#include <fstream>
using namespace std;
int main(void){
string line;
fstream leer(“fff.dat”, ios::in);
if( leer ){
while( !leer.eof() ){ // Verifica la apertura
getline( leer, line);
cout << line;
}
}
else{
cout << “\nERROR ABRIENDO EL ARCHIVO DE TEXTO\n”;
exit(1);
}
leer.close();
return 0; 64
}
C:\Borland\BCC55\Bin>asleer0d

Escritura de archivo de texto

Usando los recursos de fstream

65
 Ver en los ejemplos código más
elaborado para el procesamiento de
entrada y salida usando archivos de
texto ascii

66
ARCHIVOS BINARIOS
 CADA BYTE CONTIENE UN VALOR EN
EL RANGO [0, 255] Y CON SIGNIFICADO
ÚNICO.

 PODEMOS ALMACENAR TIPOS DE


DATOS int, double, bool, string,...

 EN C++ SON SIMILARES A LOS


ARREGLOS DE REGISTROS;
67
 LOS ARCHIVOS ASCII SON UN TIPO
ESPECIAL DE LOS ARCHIVOS
BINARIOS DONDE CADA BYTE
REPRESENTA UN CÓDIGO ASCII-8 STD;

 PUEDEN ALMACENAR IMÁGENES,


SONIDOS, VERSIONES COMPRIMIDAS
DE OTROS ARCHIVOS, ETC , EN FIN,
CUALQUIER TIPO DE CONTENIDO DE
ARCHIVO.
68
 TIENEN CARACTERÍSTICAS
FUNDAMENTALES QUE LOS
DIFERENCIAS DE LOS ARCHIVOS
ASCII:

 SON LONGITUD FIJA;


 SON DE ACCESO ALEATORIO ;
 EL CONTENIDO DE UN REGISTRO SE
PUEDE CAMBIAR DENTRO DEL MISMO
ARCHIVO;

69
MANEJO DE ARCHIVOS
BINARIOS (ARCHIVOS DE
ACCESO ALEATORIO),
CON <fstream> EN C++

 USAR ios::binary AL ABRIRLO,


RECORDAR QUE POR DEFAULT SE
ABRE COMO ARCHIVO ASCII-8 STD;

70
 ESPECIFICAR SI ES ios:out, ios::in
ó ambos;
 USAR read() PARA LEERLO;
 USAR write() PARA ESCRIBIRLO;

71
RECURSO A USAR EN
ARCHIVOS BINARIOS
FUNCIÓN DESCRIPCIÓN
get() lee un byte y apunta al siguiente byte a ser leido
put() escribe un byte y apunta al siguiente byte para escritura
read() lee un bloque de bytes
write() escribe un bloque de bytes
seekg() va a una posición específica para ser leída
seekp() va a una posición específica para ser escrita
tellg() retorna la posición actual del puntero interno de
lectura_escritura, el cual solo funciona cuando se lee o se
escribe
tellp() retorna la posición actual del puntero interno de
lectura_escritura
flush() graba los datos desde el buffer al dispositivo de
almacenanmiento en que esta el archivo en proceso
72
 Ejemplo de uso de put() y get() con
archivos binarios

/*
abescrlect0.cpp
Compilador: bcc32 5.5

C++ / Ferreiras/ Archivos/ Binarios

Uso de put, seekg, get

*/

En un archivo binario podemos escribir solo texto


y procesarlo como un archivo de texto.

73
#include <fstream>
using namespace std;

int main(void){

char car('F');
fstream escr_leer("arch3.dat", ios::out | ios::in | ios::binary);
if( escr_leer ){
escr_leer.put(car);// escribe el contenido de car en el archivo
escr_leer.seekg(ios::beg);// va al principio del archivo
escr_leer.get(car);// lee el caracter apuntado
cout << endl << car << endl;// muestra el caracter leido
}
else{
cout << "\nERROR ABRIENDO EL ARCHIVO DE TEXTO\n";
exit(1);
}
escr_leer.close();
return 0;
}

74
/*
C:\Borland\BCC55\Bin> abescrlect0

C:\Borland\BCC55\Bin>type arch3.dat
F
*/

75
 Ejemplo de uso de write y read en
archivos binarios
/*
abescrlect0a.cpp
Compilador: bcc32 5.5

C++ / Ferreiras/ Archivos/ Binarios / write, read

En un archivo binario podemos escribir solo texto


y procesarlo como un archivo de texto.

*/

76
#include <fstream>
using namespace std; file7.cpp
int main(void){

char texto[35] = "Archivos binarios solo como texto.";


char cad[35];
fstream escr_leer("arch4.bin", ios::out | ios::in | ios::binary);
if( escr_leer ){
escr_leer.write( texto, 35 );
escr_leer.seekg(ios::beg);
escr_leer.read( cad, 35 );
cout << cad << endl;
}
else{
cout << "\nERROR ABRIENDO EL ARCHIVO DE TEXTO\n";
exit(1);
}
escr_leer.close();
return 0;
}

77
/*

C:\Borland\BCC55\Bin> abescrlect0a
Archivos binarios solo como texto.

C:\Borland\BCC55\Bin>type arch4.bin <= usando type


Archivos binarios solo como texto.

C:\Borland\BCC55\Bin>asleer1 <= leyéndolo como archivo de texto

Entre el nombre del archivo de texto a leer: arch4.bin

Archivos binarios solo como texto.

*/

78
 Otro ejemplo de uso de write y read en
archivos binarios
/*
abescrlect0b.cpp
Compilador: bcc32 5.5

C++ / Ferreiras/ Archivos/ Binarios / write, read

Obsérvese que, en este caso, NO ES POSIBLE LEER EL ARCHIVO


CREADO COMO ARCHIVO DE TEXTO ASCII porque los números tienen
su propia representación que no es ASCII.

*/

79
#include <fstream>
using namespace std;

int main(void){
system("cls");
double num(123.456), x; //
fstream escr_leer("arch4.bin", ios::out | ios::in | ios::binary);
if( escr_leer ){
escr_leer.write((char*)(&num), sizeof(num));
escr_leer.seekg(ios::beg);
escr_leer.read( (char*)(&x), sizeof(x));
cout << x << endl;
}
else{
cout << "\nERROR ABRIENDO EL ARCHIVO DE TEXTO\n";
exit(1);
}
escr_leer.close();
return 0;
}

80
/*

C:\Borland\BCC55\Bin> abescrlect0b

123.456

C:\Borland\BCC55\Bin>type arch4.bin
Obsérvese este
w¥ƒ resultado al intentar
leerlo como archivo de
C:\Borland\BCC55\Bin> texto

*/

81
PROCESAMIENTO SECUENCIAL
DE ARCHIVOS BINARIOS

VER LOS
EJEMPLOS

abescrsec1.cpp
ablectsec1.cpp

82
ACCESO ALEATORIO
 El acceso aleatorio lo hacemos
usando los recursos de asociados al
puntero de archivo:

 tellg
LECTURA
 seekg
 tellp
ESCRITURA
 seekp
83
 Tener en cuenta que los registros en
el archivo están en este orden:

...
R1 R2 R3 R4 R5 R6 R7 R8 R9 ...

84
VER LOS
EJEMPLOS

- abescrdir1.cpp
- ablecdir1.cpp

85
 Ver en los ejemplos código más
elaborado para el procesamiento de
entrada y salida usando archivos
binarios.

86
EJEMPLOS

INF510_archivos1.zip

87
PROYECTO
FINAL

INF510_PF1.doc

88
Sistemas de Gestión de
Archivos de Datos (SGAD)
 Conjunto de archivos creados dentro
de las aplicaciones y de acuerdo a los
requerimientos puntuales específicos que
incluye la definición en detalle de estos
archivos para poder operar sobre estos;

89
INCONVENIENTES DE LOS
SISTEMAS DE GESTION DE
ARCHIVOS DE DATOS
 Redundancia e inconsistencia de los
datos: Se produce porque los archivos
son creados por distintos programas y van
cambiando a lo largo del tiempo;

90
Los archivos pueden tener distintos
formatos y los datos pueden estar
duplicados en varios sitios.Por ejemplo:
La cédula de una persona puede
aparecer en más de un archivo;

91
La redundancia aumenta los costes de
almacenamiento y acceso, y trae
consigo la inconsistencia de los datos:
las copias de los mismos datos no
coinciden por aparecer en varios
archivos.

92
 Dependencia física-lógica de los
datos: La estructura física de los datos
(definición de archivos y registros) se
encuentra codificada en los programas de
aplicación. Cualquier cambio en esa
estructura implica al programador
identificar, modificar y probar todos los
programas que manipulan esos archivos.

93
 Dificultad para tener acceso a
los datos: La proliferación de
programas, cada vez que se necesite
una consulta que no fue prevista en el
inicio implica la necesidad de
codificar el programa de aplicación
necesario. No permiten recuperar los
datos necesarios de una forma
conveniente y eficiente.

94
 Separación y aislamiento de los
datos: Al estar repartidos en varios
archivos, y tener diferentes formatos, es
difícil escribir nuevos programas que
aseguren la manipulación de los datos
correctos. Antes se deberían sincronizar
todos los archivos para que los datos
coincidiesen.

95
 Dificultad para el acceso
concurrente: Es complicado que los
usuarios actualicen los datos
simultáneamente. Las actualizaciones
concurrentes pueden dar por resultado
datos inconsistentes, ya que se puede
acceder a los datos por medio de
diversos programas de aplicación.

96
 Dependencia de la estructura del
archivo con el lenguaje de programación:
La estructura se define dentro de los
programas. Esto implica que los formatos de
los archivos sean incompatibles. La
incompatibilidad entre archivos generados
por distintos lenguajes hace que los datos
sean difíciles de procesar.

97
 Problemas en la seguridad de los
datos: Resulta difícil implantar
restricciones de seguridad pues las
aplicaciones se van añadiendo al sistema
según se van necesitando.

98
 Problemas de integridad de datos:
Por ejemplo, no se puede insertar una
nota de un alumno en una asignatura si
previamente esa asignatura no está
creada. Otro ejemplo, las unidades en
almacén de un producto determinado no
deben ser inferiores a una cantidad.

99
Los valores almacenados en los archivos
deben cumplir con restricciones de
consistencia.

Esto implica añadir gran número de líneas


de código en los programas. El problema
se complica cuando existen restricciones
que implican varios datos en distintos
archivos.

100
DE LOS SGAD A LOS SGBD
 Todos los inconvenientes indicados
hicieron posible el fomento y desarrollo de
los Sistemas de Gestión de Bases de
Datos (SGBD). El objetivo primordial de
un SGBD es proporcionar eficiencia y
seguridad a la hora de extraer o
almacenar información en las Bases de
Datos (BD).

101
 Los SGBD están diseñados para
gestionar grandes bloques de
información, que implica tanto la
definición de estructuras para el
almacenamiento como de mecanismos
para la gestión de la información.

102
 Un SGBD es optimizado para usar
criterios de búsquedas complejas para
localizar y extraer archivos específicos que
contienen muchas piezas de información
permitiendo presentar esta el múltiples y
complejos formatos al usuario.

103
 Una BD es un gran almacén de datos
que se define una sola vez; los datos
pueden ser accedidos de forma
simultánea por varios usuarios; están
relacionados y existe un número mínimo
de duplicidad; además en las BD se
almacenarán las descripciones de esos
datos.

104
 El SGBD es una aplicación que permite
a los usuarios definir, crear y mantener la
BD y proporciona un acceso controlado a
la misma. Ejemplos de SBSD son, entre
muchos otros, mySQL, ORACLE, SQL
Server, PostgreSQL, InterBase, ...

EN LAS ASIGNATURAS DE BASES DE DATOS SE


TRATARAN IN EXTENSO TODOS LOS TEMAS
RELATIVOS A ESTAS.

105
SISTEMA DE GESTION DE
ARCHIVOS DEL SO

 Es el Software que proporciona a los


usuarios y aplicaciones servicios para el
uso, acceso y control de accesos, tanto
de archivos como a directorios. Es
considerado parte del sistema operativo

106
 Es usado por el SO para organizar y
darle seguimiento (almacenamiento y
recuperación) a los archivos en los
dispositivos de almacenamiento
secundario. Aunque el SO provee su
propio sistema de gestión de archivos este
se puede adquirir comprándolo. También
los hay gratis.

107
 Ejemplos de sistemas de gestión
de archivos del SO son FAT32 y
NTFS para Windows, ext2, ext3 y
FAT32 para Linux, UFS, ext2, ext3 y
ZFS para Unix, HFS para Macs.

 Un sistema jerárquico de archivos


usa directorios para organizar los
archivos en una estructura de árbol.

108
EJEMPLO DE UN SISTEMA JERÁRQUICO DE ARCHIVOS

109
EJEMPLO DE UN SISTEMA JERÁRQUICO DE ARCHIVOS

110
GRACIAS!

111

Вам также может понравиться