ficheros en c#

7
UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA Programación con visual studio C# Clase 2: Acceso a ficheros Ing. Miguel Bárcenas 17/03/2013

Upload: gabriel-alvarenga

Post on 08-Sep-2015

3 views

Category:

Documents


2 download

DESCRIPTION

fdfds

TRANSCRIPT

  • UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA

    Programacin con visual studio C#

    Clase 2: Acceso a ficheros

    Ing. Miguel Brcenas

    17/03/2013

  • Universidad Nacional Autnoma de Nicaragua UNAN-Len

    Departamento de Computacin

    1

    Una de las operaciones ms comunes o al menos que se hacen con bastante frecuencia en

    cualquier aplicacin es la de leer y escribir en ficheros, particularmente de texto, es decir,

    ficheros normales y corrientes, sin contenidos especiales.

    El manejo de archivos en la plataforma .NET se logra mediante la clase Stream que representa un flujo de informacin (Un archivo es considerado un flujo de datos).

    La clase Stream, es una clase abstracta, por lo que no es posible utilizarla directamente ya que no se puede crear instancias. Lo que se debe hacer es utilizar una de sus clases derivadas que se especializan en el tratamiento de streams para diferentes destinos como por ejemplo FileStream (para el manejo de archivos), Memorystream (para el manejo de datos en memoria).

    La primera opcin para escribir y/o leer datos de un archivo de texto es utilizar la clase FileStream. Esta clase se encuentra en el namespace System.IO y es una clase derivada de la clase Stream.

    El FileStream acta como un intermediario entre el sistema de archivos y nuestra aplicacin, permitiendo realizar de una manera limpia y sencilla operaciones de escritura y lectura en archivos. Para utilizar el FileStream, lo primero que se debe hacer es crear una instancia que apunte al archivo deseado.

    string fileName = @"C:\temp.txt"; FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);

  • Universidad Nacional Autnoma de Nicaragua UNAN-Len

    Departamento de Computacin

    2

    Tenemos la posibilidad de utilizar alguno de los mtodos ofrecidos por la clase utilitaria File, que nos permite obtener un FileStream con parmetros especficos de acuerdo al mtodo utilizado para obtenerlo. A continuacin se muestra un ejemplo:

    FileStream fs = File.Create(@"C:\temp.txt");

    En el ejemplo anterior se utiliz el mtodo Create el cual crea el archivo en la ruta especificada y en caso de que el archivo exista, es sobrescrito. Estos mtodos ofrecidos por la clase File, facilitan el desarrollo de aplicaciones con manejo de archivos y permite una mejor lectura de cdigo.

    La plataforma .NET ofrece otras maneras de administrar Streams. Una de esas maneras es utilizar la clase StreamWriter para escribir en archivos y StreamReader para leer desde archivos. Es necesario tener en cuenta que estas clases estn orientadas a obtener caracteres.

    Con la clase StreamWriter, solo nos debemos preocupar por utilizar el mtodo Write o WriteLine para escribir datos en un archivo de texto. WriteLine() Totalmente equivalente a Console.WriteLine(), se utiliza la misma idea, y el mismo formato, sabiendo que se estar escribiendo el texto no a la consola, sino que al stream abierto con el constructor. string linea = Texto de prueba;sw.WriteLine(linea); sw.WriteLine(Los valores posibles son: {0} y {1}, 3, 5);

    Write () Tambin presente, el mtodo simple Write(), permite escribir texto en el stream, de la misma forma que su equivalente mtodo de la clase Console. En este caso se reconocen las siguientes alternativas de uso:

    Imprimir un string string linea = Texto de prueba; sw.Write(linea);

    Imprimir un caracter char caracter = T; sw.Write(caracter);

    StreamReader est diseado para la entrada de caracteres mediante una codificacin determinada, mientras que la clase Stream est diseada para la entrada y salida de bytes. Se utiliza StreamReader para leer lneas de informacin desde un archivo de texto estndar. ReadLine() Al igual que el conocido Console.ReadLine(), este mtodo lee una lnea completa de un archivo de texto hasta el cambio de lnea ms prximo. Al igual que su equivalente de consola, StreamReader.ReadLine() no incluye en el string el carcter de cambio de lnea. string linea = sr.ReadLine()

  • Universidad Nacional Autnoma de Nicaragua UNAN-Len

    Departamento de Computacin

    3

    ReadToEnd() Este mtodo, por su parte, se encarga de acumular la informacin que hay desde la lectura anterior (que pudo haberse hecho con ReadLine(), por ejemplo) hasta el final del archivo, todo en el mismo string.string linea = sr.ReadToEnd() Read () Finalmente, el mtodo simple Read() se encarga de leer un caracter a la vez, lo que permite procesar smbolo por smbolo el contenido del archivo. Convenientemente, este mtodo reconoce el cambio de lnea y se lo salta como si no existiese. Cuando se encuentra con el fin de archivo, retorna un valor 1, considerando que su retorno es siempre un int (y no un char). int SigCaracter = sr.Read(); Estos mtodos reciben tipos de datos nativos del lenguaje como por ejemplo int, bool, decimal, float, string, char, etc. Y utiliza el codificador indicado cuando se instancia la clase para codificar los caracteres de salida al archivo de texto.

    string filename = "fichero.txt"; StreamWriter write = new StreamWriter(filename); write.WriteLine("Programacion con visual C#"); MessageBox.Show("Datos Guardado correctamente"); write.Close();

    La diferencia entre el mtodo Write y WriteLine, es que el segundo inserta un salto de lnea al final de los datos ingresados, haciendo que la prxima vez que se quiera insertar, se har en la siguiente lnea.

    Aunque la clase StreamWriter no hereda de la clase Stream, si utiliza en su implementacin un Stream en el cual escribe o lee secuencias de caracteres. Por eso, esta clase en su interior, se encarga de crear y utilizar el Stream necesario para apuntar al archivo de texto representado por la ruta que se utilizo en el constructor del ejemplo. Sin embargo, esta clase tambin tiene otro constructor donde se le puede pasar un Stream que tengamos creado en lugar de la ruta, como se ve a continuacin:

    string filename = "fichero.txt"; FileStream stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter write = new StreamWriter(stream); write.WriteLine("Programacion con visual C#" MessageBox.Show("Datos Guardado correctamente"); write.Close(); stream.Close();

  • Universidad Nacional Autnoma de Nicaragua UNAN-Len

    Departamento de Computacin

    4

    El StreamReader.Peek regresa un entero que representa el siguiente carcter que se va a leer, o -1 si no hay caracteres que leer o si la secuencia no admite la operacin de bsqueda.

    string filename="fichero.txt"; StreamReader read = new StreamReader(filename); while(read.Peek() >-1) { cttexto.Text+=read.ReadLine();//cttexto es el nombre de una caja de texto(TextBox) } read.Close();

  • Universidad Nacional Autnoma de Nicaragua UNAN-Len

    Departamento de Computacin

    5

    Cdigos:

    Escribiendo en un archive de texto

    string filename = "fichero.txt"; StreamWriter write = new StreamWriter(filename); write.WriteLine(cttexto.Text.Trim()); MessageBox.Show("Datos Guardado correctamente"); write.Close(); O

    string filename = "fichero.txt"; System.IO.File.WriteAllText(filename, cttexto.Text.Trim());

    Leyendo desde un archivo de texto

    Leer todo el fichero a la vez

    string filename="fichero.txt"; StreamReader read = new StreamReader(filename); // while (read.Peek() > -1) cttexto.Text += read.ReadToEnd();

    Leer fila por fila

    string filename="fichero.txt"; StreamReader read = new StreamReader(filename); while(read.Peek() >-1) { cttexto.Text+=read.ReadLine(); } read.Close();

    Aadir al final de un archivo

    string filename = "fichero.txt"; FileStream stream = new FileStream(filename, FileMode.Append, FileAccess.Write); StreamWriter write = new StreamWriter(stream); write.WriteLine(cttexto.Text.Trim()); MessageBox.Show("Datos Guardado correctamente"); write.Close();

  • Universidad Nacional Autnoma de Nicaragua UNAN-Len

    Departamento de Computacin

    6

    Caja de dialogo estndar

    El componente OpenFileDialog permite a los usuarios examinar las carpetas de su equipo

    o de cualquier equipo de la red y seleccionar uno o ms archivos para abrirlos. El cuadro

    de dilogo devuelve la ruta de acceso y el nombre del archivo que seleccion el usuario en

    el cuadro de dilogo.

    Adems es un control utilizado para crear una interfaces de comunicacin entre la

    aplicacin y archivos externos, como ser imgenes o texto. Puede abrir el OpenFileDialog

    que est en su programa de Windows Forms. El cuadro de dilogo no se abre

    automticamente y debe ser invocado en el cdigo personalizado. Usted tendr que usar

    un controlador de eventos para abrir el cuadro de dilogo en el cdigo C#.

    Este control, al momento de insertarlo se dibuja en la parte externa inferior del formulario

    (fuera de este), porque no tiene interface grfica (otros controles tambin tienen este

    comportamiento).

    SaveFileDialog

    Pregunta al usuario si desea seleccionar una ubicacin para guardar un archivo. Esta clase no se puede

    heredar.

    Se utiliza como una solucin sencilla para permitir que los usuarios guarden archivos, en lugar de

    configurar un cuadro de dilogo propio. Si se apoya en cuadros de dilogo estndar de Windows, la

    funcionalidad bsica de las aplicaciones que cree resultar inmediatamente familiar para los usuarios.

    Tenga en cuenta, no obstante, que cuando utilice el componente SaveFileDialog deber escribir su propia

    lgica de almacenamiento de archivos.