Professional Documents
Culture Documents
CURS 2022-23
[Pràctica 8]
PRÀCTICA 8: FITXERS
1 FITXERS EN C++
Incloure prèviament la biblioteca "fstream" on estan definits els tipus de fitxers en C++ i les operacions que es
poden realitzar sobre ells:
#include <fstream>
Hi ha dos tipus de fitxers: d'entrada (només està permès llegir) i d'eixida (només està permès escriure dades). Els dos
tipus d'arxius estan identificats en C++ per dos classes diferents:
ifstream (Input Stream) Arxius d'entrada (lectura).
ofstream (Output Stream) Arxius d'eixida (escriptura).
Declaració de variables:
ifstream entrada; //entrada identifica a un fitxer de lectura.
ofstream eixida; //eixida identifica a un fitxer d'escriptura.
Si volerem afegir dades a un fitxer binari, posaríem també el paràmetre ios::binary de la següent manera:
nom_fitxer_logic.open (nom_fitxer_fisic, ios::app | ios::binary);
1
Assignatura: Informàtica
CURS 2022-23
[Pràctica 8]
#include <string>
Les paraules o noms de fitxers (sense espais en blanc) es poden llegir de teclat com els enters o els reals:
string nom;
cout >> nom;
En obrir un fitxer el nom del qual ha estat introduït per l'usuari i emmagatzemat en una variable de tipus string cal
realitzar una conversió usant el mètode c_str()
entrada.open(nom.c_str());
2
Assignatura: Informàtica
CURS 2022-23
[Pràctica 8]
*/
eixida << x; // Funciona amb qualsevol tipus de dada
eixida.put(c); // Només funciona amb char
En les operacions d'escriptura en arxius podem usar els mateixos modificadors de format que utilitzem en la pràctica 3
per a mostrar informació per pantalla, l'única diferència és que ara les funcions de format les apliquem sobre el fitxer
d'eixida en què volem escriure: eixida.
Una manera de llegir TOTES les dades d'un fitxer de text separat per espais en blanc és:
...
// L'expresio (lectura) sera false quant siga final de fitxer
while (fich >> dato)
{
// Processar dada
...
}
...
O per llegir TOTS els caràcters d'un fitxer de text (incloent espais en blanc i salts de línia):
...
// L'expresio sera false quant siga final de fitxer
while (fich.get (ch) )
{
// Processar caracter ch
...
}
...
7 La funció eof()
Esta funció s'utilitza per a detectar el final de fitxer, “end of file” en fitxers de tipus text.
entrada.eof( );
Esta funció ens torna una expressió booleana: true si hem arribat al final del fitxer i ja no hi ha més informació per a
llegir, i false en cas contrari.
En el següent bucle escriurem per pantalla tota la informació del fitxer.
char dada; int dada;
dada = f.get(); //llig abans f >> dada;
while(!f.eof()) while( !f.eof() )
{ {
cout << dada << endl; cout << dada << endl;
3
Assignatura: Informàtica
CURS 2022-23
[Pràctica 8]
La potència d’estes operacions radica en que es pot passar com a primer paràmetre la direcció d’un valor de
qualsevol tipus, per la qual cosa es pot escriure directament un caràcter, un número, o inclús un array o una estructura.
Per a indicar la direcció d’una variable s’usa l’operador &. Cal fer notar que, com per motius d’eficiència, quan en C es
passa un array com a paràmetre, en realitat es passa un punter al primer element. Açò fa que no siga necessari usar &
amb els arrays.
La quantitat de memòria a escriure es calcula automàticament amb l’operació sizeof, que es pot aplicar tant a
variables com a tipus.
4
Assignatura: Informàtica
CURS 2022-23
[Pràctica 8]
En fitxers binaris NO ES DEURIA utilitzar el mètode eof, ja que és un mètode per a fitxers de tipus text.
9 Tancar fitxers
Tots els arxius han de tancar-se quan el programa haja acabat d'obtindre entrades de l'arxiu o d'enviar eixides a l'arxiu.
Al tancar un arxiu desconnectem el seu flux. Els arxius es tanquen amb la instrucció close. Observar que la funció close
no pren arguments.
entrada.close( );
eixida.close( );