Está en la página 1de 7

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
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
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()
2

Universidad Nacional Autnoma de Nicaragua


UNAN-Len
Departamento de Computacin
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
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

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

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.