File Streams
-
Upload
miguelhernandez -
Category
Documents
-
view
261 -
download
6
description
Transcript of File Streams
![Page 1: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/1.jpg)
1
Entrada y Salida víaArchivos
• Lectura de un archivo de entrada
• Escritura en un archivo de salida
Agustín J. González
ELO326: Seminario II
2do. Sem. 2001
![Page 2: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/2.jpg)
2
Lectura de archivos de entrada
• Un archivo de entrada es una secuencia debytes que es leída desde un archivo dedisco
• la clase ifstream define objetos a partir dearchivos de entrada.– Esta clase es derivada de la clase istream #include <fstream>
• Los archivos pueden contener datos binarioso de texto
![Page 3: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/3.jpg)
3
Apertura de un archivo de entrada
Dos métodos :• Método #1: Pasar el nombre del archivo al
constructor de ifstream– Este debe ser un arreglo de caracteres, no un objeto
string
• Método #2: Llamar al miembro open() usandoun objeto ifstream ya existente
Ejemplos...
![Page 4: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/4.jpg)
4
Apertura de un archivo de entrada
// method #1:
ifstream payFile("payroll.txt");
// method #2:
ifstream empFile;empFile.open("employee.txt");
La apertura lleva el puntero interno de alcomienzo del archivo.
![Page 5: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/5.jpg)
5
Apertura de un archivo de entrada
const string PayFilename("payroll.txt");
ifstream payFile( PayFilename.c_str() );
• Mejor estilo: Declarar un string paramantener el nombre del archivo
• Se debe llamar a c_str() en el string pararetornar su arreglo de caracteres.
![Page 6: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/6.jpg)
6
Chequeo de errores
const string PayFilename("payroll.txt");
ifstream payFile( PayFilename.c_str());if( !payFile.is_open() ){ cerr << "Cannot open input file: " << PayFilename << endl; return;}
• La función is_open() de la clase ifstream retornaverdadero cuando un archivo está abierto
![Page 7: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/7.jpg)
7
Chequeo de errores
ifstream payFile( PayFilename.c_str());if( !payFile ){ cerr << "Cannot open input file: " << PayFilename << endl; return;}
El objeto ifstream puede ser usado como unaexpresión booleana, la cual es falsa cuando elarchivo está es un estado de falla:
![Page 8: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/8.jpg)
8
Lectura de un archivo
string buffer;
getline(infile, buffer);
• Basta llamar al operador de extracción ( >> ). Éstesalta espacios en blanco e ingresa el archivo deentrada en variables:
infile >> age >> salary;
• Llamamos a getline(infile, string) para leer unalínea entera :
![Page 9: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/9.jpg)
9
Lectura de archivos
while( !infile.eof() )
{
infile >> salary;
infile.ignore(10,'\n');
getline(infile, buffer);}
Usamos un lazo y llamanos la función miembroeof() para detectar una condición de fin de archivo:
![Page 10: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/10.jpg)
10
Cerrado de Archivos
void OpenFile()
{
ifstream payFile(PayFilename.c_str());
//...
//...} // payFile goes out of scope here
• Los archivos se cierran automáticamente cuandosus variables pierden su alcance.
• Una variable pierde su alcance al final de subloque de definición.
![Page 11: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/11.jpg)
11
Cierre de Archivos
void OpenFile()
{
ifstream payFile(PayFilename.c_str());
//...
payFile.close(); payFile.open( PayFilename.c_str());
//...
}
• Se puede solicitar cerrar un archivo llamando lafunción close()
![Page 12: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/12.jpg)
12
Función OpenFile
bool OpenFile( const string & filename,
ifstrean & infile )
// PURPOSE: Opens an input file stream
// RECEIVES: filename - a string// infile - input file stream
// RETURNS: true if the file could be// opened, false otherwise.
{
infile.open( filename.c_str() );
// continued...
![Page 13: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/13.jpg)
13
Funcion OpenFile
//...
if( !infile.is_open() ) { cerr << "Cannot open input file: " << filename << endl; return false; } return true;}
![Page 14: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/14.jpg)
14
Llamado a OpenFile
const string PayFilename("payroll.txt");
ifstream payFile;
if( !OpenFile(PayFilename, payFile) ) return;
![Page 15: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/15.jpg)
15
Escritura a aun Archivo de Salida
![Page 16: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/16.jpg)
16
Apertura de un Archivo de salida
• Usamos las clase ofstream para definir objetospara archivos de salida– La clase ofstream se deriva de ostream #include <fstream>
• Se crea un nuevo archivo si no existe ya.• Si se abre un archivo para salida, cualquier
contenido previo del archivo es borrado, amenosque indicamos lo contrario.
![Page 17: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/17.jpg)
17
Apertura de un archivo de salida
const string PayFilename("payroll.txt");
ofstream payFile( PayFilename.c_str());if( !payFile.is_open() ){ cerr << "Cannot create output file: " << PayFilename << endl; return;}
Segmento de código con chequeo deerrores:
![Page 18: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/18.jpg)
18
Agregando contenidos a un archivo
ofstream payFile( "payfile.txt", ios::app );
El parámetro ios::app le indica al constructor de laclase ofstream el deseo de agregar contenido a unarchivo:
![Page 19: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/19.jpg)
19
Escritura a un archivo de salida
outfile << employeeID << '\n'
<< firstName << '\n'
<< lastName << '\n'
<< age << " " << yearsOfService
<< " " << salary << endl;
• Usamos el operador de insercion ( << ) paraescribir hacia un archivo de salida.
• Es posible definir formatos para la salida...
![Page 20: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/20.jpg)
20
Escritura a un archivo de salida
outfile
<< "Employee ID: " << employeeID << '\n'
<< "Name: " << firstName << " "
<< lastName << '\n' << "Age: " << age
<< '\n' << "Years of Service: " << yearsOfService << '\n'
<< "Salary: " << salary << endl;
• Es posible usar otros tipos de formato:
![Page 21: File Streams](https://reader034.fdocuments.ec/reader034/viewer/2022042504/563db9cd550346aa9aa018eb/html5/thumbnails/21.jpg)
21
Fin