manejo+archivos-c++

Upload: shabedekam

Post on 31-May-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Manejo+Archivos-c++

    1/7

    Manejo de archivos en C++

    1 de noviembre de 2002

    1. Streams

    En C++, los archivos se manejan con un tipo particular de stream. Un streames una estructura de datos que se utiliza para manejar un flujo de caracteresy permitir poner o sacar de el tipos de datos estandar o clases definidas por elusuario. Por ejemplo, cout es un stream que nos permite escribir caracteres enla consola. Repasemos un poco el funcionamiento de cout y cin:

    #include

    using namespace std;

    void main()

    {

    int n;

    cout n;

    cout >

    Este operador, tambien llamado de extraccion, saca cosas de un streamy las coloca en la variable recibida como parametro. En su comportamientopor defecto, este operador ignora los espacios en blanco. Para entender esto,supongamos que el stream contiene lo siguiente:

    1 2 3 4

    |

    1

  • 8/14/2019 Manejo+Archivos-c++

    2/7

    AyEDI 2do cuatrimestre de 2002 2

    (| indica donde se va a realizar la proxima extraccion). Si la siguiente instruccion

    de nuestro programa escin >> i;

    donde i es una variable de tipo int, i va a pasar a valer 1 y el estado del streamva a ser

    2 3 4

    |

    Si nuevamente hacemos

    cin >> i;

    el programa va a saltear el espacio, va a poner el 2 en i y va a dejar el puntero

    en el siguiente espacio en blanco. Es decir, al leer de un stream, por defecto, seignoran los espacios en blanco.

    1.2. Manipuladores

    Para cambiar el comportamiento de un stream, se pueden utilizar ciertasfunciones especiales, llamadas manipuladores. Los manipuladores estan defini-dos en el archivo iomanip. Veamos algunos de los mas utiles.

    1.2.1. endl

    Para marcar el final de una lnea en un stream de salida, podemos usar elmanipulador endl

    #include

    #include

    using namespace std;

    void main()

    {

    cout

  • 8/14/2019 Manejo+Archivos-c++

    3/7

    AyEDI 2do cuatrimestre de 2002 3

    {

    char c;

    cout c; cout > c; cout c;

    cin >> c; cout > c; cout > c; cout

  • 8/14/2019 Manejo+Archivos-c++

    4/7

    AyEDI 2do cuatrimestre de 2002 4

    2. Archivos

    En C++, los archivos se manejan mediante filestreams o fstreams. Estosson streams que ademas proveen funciones para manipular archivos. Es decir, sinuestro programa escribe cosas en la consola, con los mismos comandos podemosescribir cosas en un archivo. Simplemente hay que cambiar cout por el nombredel stream que maneje nuestro archivo.

    2.1. Entrada

    Para abrir un archivo para lectura, utilizamos un ifstream. Para eso, te-nemos que definir una variable de ese tipo y vincularla a alg un archivo. Pararealizar esta vinculacion, tenemos dos metodos: dar el nombre del archivo al de-clarar la variable o utilizar el metodo open. Ambos producen el mismo resultado.

    Veamos un ejemplo.

    #include

    #include

    #include

    using namespace std;

    void main()

    {

    ifstream entrada("Hola.txt");

    ifstream input;

    char c;

    input.open("Hello.txt");

    if (entrada.good())

    cout

  • 8/14/2019 Manejo+Archivos-c++

    5/7

    AyEDI 2do cuatrimestre de 2002 5

    operacion de lectura/escritura sera viable. En el caso de archivos, preguntar

    good despues de abrir un archivo nos informa si se pudo abrir correctamente.Cuando se trabaja con streams de entrada, a menudo es necesario leer uncaracter y volverlo a poner dentro del stream. Para eso, los istreams poseen elmetodo putback(char), que coloca el caracter en el stream, pasando a ser elproximo caracter que se leera.

    Otro metodo util para manipular ifstreams es eof(). Este nos dice si yallegamos al final del archivo. Eso quiere decir que ya no se podr a leer mas.

    2.2. Salida

    Para manejar un archivo de salida, utilizamos un ostream

    #include

    #include #include

    using namespace std;

    void main()

    {

    ofstream salida("Hola.txt");

    ofstream output;

    char c;

    output.open("Hello.txt");

    cin >> c;

    salida

  • 8/14/2019 Manejo+Archivos-c++

    6/7

    AyEDI 2do cuatrimestre de 2002 6

    using namespace std;

    enum Palo {Corazones = C, Treboles = T,

    Diamantes = D, Piques = P};

    void main()

    {

    Palo p;

    p = Corazones;

    cout

  • 8/14/2019 Manejo+Archivos-c++

    7/7

    AyEDI 2do cuatrimestre de 2002 7

    algun otro no muy relevante). De todas formas, s brinda una forma de cambiar

    el comportamiento de un istream respecto a los espacios en blanco. Para hacerque estos no sean ignorados, debemos usar el metodo unsetf de la siguienteforma

    cin.unsetf(ios::skipws);

    Si queremos volver a ignorar los espacios en blanco, hacemos

    cin.setf(ios::skipws);