Professional Documents
Culture Documents
1 2
E/S estándar
E/S estándar
Incluyendo el archivo cabecera <iostream> tenemos acceso a
las clases istream, ostream e iostream, así como a las
variables cin y cout de tipos istream y ostream El método getline(c-str, long, sep) lee en c-str long-1 caracteres o
hasta que encuentre el separador sep. Por ejemplo:
respectivamente, que se corresponden con la E/S estándar de la
consola.
char A[N];
cin.getline(A,M); // M<=N
Las variables cin y cout (así como las de tipo archivo), contienen
un objeto de la correspondiente clase, que utilizaremos a través
de sus métodos y operadores. se leerán en A los M siguientes caracteres, salvo que se encuentre
antes EOF, o salto de línea (‘\n’, separador implícito).
El operador de inserción << (cout<<expresión;) y el operador de El método ignore(long, sep) es similar a getline, pero los caracteres
extracción >> (cin >> variable;), están definidos ambos para los no se almacenan.
tipos de datos fundamentales y son extensibles para los demás
datos mediante la sobrecarga.
Otros operadores son: endl y flush.
3 4
Archivos
Archivos
Ejemplo: copia de un fichero en aplicación de consola
Además tenemos la función getline(istream&,string&), que lee
en el string los siguientes caracteres hasta el salto de línea (que // proyconsola.cpp "File/New/Console Wizard"
se consume pero no se guarda): getline(cin,s); //----------------------------------------------------
#pragma hdrstop
Para detectar el final de archivo se dispone del método eof():
// importamos las cabeceras
if (cin.eof()) .....
#include <iostream> // entrada/salida estándar
#include <string> // de la biblioteca estándar
Incluyendo el archivo cabecera <fstream> tenemos acceso a
las clases ifstream, ofstream y fstream para archivos de #include <fstream> // entrada/salida de archivos
entrada, salida y de entrada/salida, respectivamente. //-----------------------------------------------------
#pragma argsused
Las clases “fstream” derivan de las correspondientes clases using namespace std;
“stream” y por tanto heredan todos sus métodos y operadores.
/* para nombrar los elementos importados sin cualificarlos con std:: */
Además la función getline admite parámetros de tipo ifstream
gracias al polimorfismo.
5 6
9 10
Archivos de escritura
#include <ofstrem> // o <fstream>
Archivos de escritura
using namespace std;
ofstream sal; // o ofstream sal(“salida.dat”);
sal.open(“salida.dat”); // en cuyo caso esta instrucción sobra El modo de apertura out, destruye todo el contenido
if (!sal.fail()) { previo del archivo. Si queremos escribir añadiendo al final
int num; debemos indicar además el modo app:
while (darvalor(num)) sal << num; // Cuidado! sal<<num<< “ ”;
sal.close();
}
sal.open(“salida.dat”,ios::out|ios::app);
fstream sal;
sal.open(“salida.dat”, ios::out);
11 12
Archivos Archivos
Utilizando el cursor (en bytes):
Prácticamente todos los métodos y operadores pueden usarse
como condiciones booleanas para determinar si han tenido éxito. int tellp(); // en modo escritura p de put
Además podemos preguntar con los métodos: eof(), fail(), bad() y
good(). int tellg(); // en modo lectura g de get
Cuando el final del archivo se lee, el archivo queda en estado de como flujo de bytes, tell nos devuelve el lugar donde se
error, que podemos restaurar con el método clear(). encuentra el cursor.
var ent:file of tipo; ifstream ent; // o fstream var sal:file of tipo; ofstream sal; // o fstream
t: tipo tipo t; t: tipo tipo t;
assign(ent, “...”); ent.open(“...”, ios::binary); assign(sal, “...”); sal.open(“...”, ios::binary);
Reset(ent); Rewrite(sal);
// eof(ent) // ent.eof() Write(sal,t); sal.write( (char*)&t, sizeof(tipo) );
Read(ent,t); ent.read( (char*)&t, sizeof(tipo) ); Close(sal); sal.close();
Close(ent); ent.close();
15 16