Anda di halaman 1dari 6

Lectura y escritura de archivos en c#

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 a!stracta por lo que no es posi!le utili"arla directamente #a
que no se puede crear instancias. Lo que se de!e hacer es utili"ar una de sus clases
derivadas que se especiali"an en el tratamiento de streams para diferentes destinos como
por ejemplo $ileStream (para el manejo de archivos) %emor#stream (para el manejo de
datos en memoria).
La primera opcin para escri!ir #&o leer datos de un archivo de te'to es utili"ar la clase
$ileStream. Esta clase se encuentra en el namespace S#stem.() # es una clase derivada
de la clase Stream.
El $ileStream act*a como un intermediario entre el sistema de archivos # nuestra
aplicacin permitiendo reali"ar de una manera limpia # sencilla operaciones de escritura
# lectura en archivos. +ara utili"ar el $ileStream lo primero que se de!e hacer es crear
una instancia que apunte al archivo deseado.
string fileName = @"C:\temp.txt";
FileStream fs = new FileStream(fileName, FileMode.penrCreate,
File!""ess.#rite, FileS$are.None%;

,omo se ve en la figura anterior es un constructor que reci!e una cantidad considera!le
de par-metros.
Tenemos la posi!ilidad de utili"ar alguno de los m.todos ofrecidos por la clase utilitaria
$ile que nos permite o!tener un $ileStream con par-metros espec/ficos de acuerdo al
m.todo utili"ado para o!tenerlo. 0 continuacin se muestra un ejemplo1
FileStream fs = File.Create(@"C:\temp.txt"%;
En el ejemplo anterior se utili" el m.todo ,reate el cual crea el archivo en la ruta
especificada # en caso de que el archivo e'ista es so!rescrito. Estos m.todos ofrecidos
por la clase $ile facilitan el desarrollo de aplicaciones con manejo de archivos # permite
una mejor lectura de cdigo.
La plataforma .NET ofrece otras maneras de administrar Streams. Una de esas maneras
es utili"ar la clase StreamWriter para escri!ir en archivos # StreamReader para leer
desde archivos. Es necesario tener en cuenta que estas clases est-n orientadas a o!tener
caracteres.
,on la clase Stream2riter solo nos de!emos preocupar por utili"ar el m.todo 2rite o
2riteLine para escri!ir datos en un archivo de te'to. Estos m.todos reci!en tipos de
datos nativos del lenguaje como por ejemplo int !ool decimal float string char etc. 3
utili"a el codificador indicado cuando se instancia la clase para codificar los caracteres de
salida al archivo de te'to.
&sing S'stem.(;
stati" )oid Main(string*+ args%
,
Stream#riter writer = new Stream#riter(@"C:\temp.txt"%;
writer.#rite-ine(".sta es la primera l/nea del ar"$i)o."%;
writer.Close(%;
0
La clase Stream2riter es una clase especiali"adas para el tra!ajo de Stream hacia
archivos de te'to.
La diferencia entre el m.todo 2rite # 2riteLine es que el segundo inserta un salto de
l/nea al final de los datos ingresados haciendo que la pr'ima ve" que se quiera insertar
se har- en la siguiente l/nea.
0unque la clase Stream2riter no hereda de la clase Stream si utili"a en su
implementacin un Stream en el cual escri!e o lee secuencias de caracteres. +or eso esta
clase en su interior se encarga de crear # utili"ar el Stream necesario para apuntar al
archivo de te'to representado por la ruta que se utili"o en el constructor del ejemplo. Sin
em!argo esta clase tam!i.n tiene otro constructor donde se le puede pasar un Stream que
tengamos creado en lugar de la ruta como se ve a continuacin1
&sing S'stem.(;
stati" )oid Main(string*+ args%
,
string fileName = "temp.txt";
FileStream stream = new FileStream(fileName, FileMode.penrCreate,
File!""ess.#rite%;
Stream#riter writer = new Stream#riter(stream%;
writer.#rite-ine(".sta es la primera l/nea del ar"$i)o."%;
writer.Close(%;
0
El complemento del o!jeto Stream2riter es el o!jeto Stream4eader cu#o principal
o!jetivo es facilitarnos las tareas de lectura de cadenas de caracteres. ,on este o!jeto nos
podemos despreocupar de esas tareas de !ajo nivel para poder o!tener un cdigo mucho
m-s limpio # f-cilmente legi!le.
&sing S'stem.(;
stati" )oid Main(string*+ args%
,
Stream1eader reader = new Stream1eader(@"C:\temp.txt"%;
#rite-ine(reader.1eadline(%%;
writer.Close(%;
0
En el ejemplo se ve como f-cilmente se puede leer informacin de un archivo de te'to
utili"ando el m.todo 4eadLine del o!jeto Stream4eader. Este m.todo simplemente lee la
l/nea siguiente teniendo en cuenta la posicin actual del puntero del archivo.
Es importante aclarar que utili"ando los streams vistos hasta el momento se pueden leer #
escri!ir en archivos de te'to cadenas de caracteres es decir te'to plano. Esto implica que
la informacin escrita en los archivos podr- ser vista # entendida por cualquier persona
#a que se guarda tal # como se encuentra en un principio.
Lo anterior puede llegar a ser un pro!lema en los casos en que se elige utili"ar archivos
de te'to como repositorio de datos de una aplicacin (aunque esto es poco recomenda!le
ha!r-n casos en los pueda llegar a ser necesario) # digo que es un pro!lema porque
podr/a ha!er informacin que no queremos que cualquier persona la pueda ver # mucho
menos entender sino que quisi.ramos que dicha informacin estuviera almacenada de
forma segura.
&sing S'stem.(;
stati" )oid Main(string*+ args%
,
string fileName = "temp.txt";
FileStream stream = new FileStream(fileName, FileMode.pen,
File!""ess.1ead%;
Stream1eader reader = new Stream1eader(stream%;
w$ile (reader.2ee3(% 4 56%
,
Console.#rite-ine(reader.1ead-ine(%%;
0
reader.Close(%;
0
.l StreamReader.Peek regresa &n entero 7&e representa el sig&iente
"ar8"ter 7&e se )a a leer, o 56 si no $a' "ara"teres 7&e leer o si la
se"&en"ia no admite la opera"i9n de :;s7&eda.
Lectura y escritura de archivos Binarios en c#
Una posi!le opcin para esto es almacenando la informacin en formato !inario es decir
que la informacin estar- almacenada no en formato de te'to plano sino en su
representacin !inaria (5s # 6s) lo cual permite tener mas privacidad ()7) solo mas
privacidad no mucha privacidad ni seguridad. Si el punto fuera como o!tener una forma
segura de almacenar informacin tendr/amos que mirar los temas de cifrado # hashing).
En .NET el o!jeto que nos facilita tra!ajar con Stream de datos !inarios es el
BinaryWriter # el BinaryReader los cuales supongo pueden deducir como se utili"an
seg*n lo visto anteriormente.
El primero permite escri!ir datos en un archivo de te'to en formato !inario mediante el
m.todo 2rite() el cual.tiene varias so!recargas entre los cuales acepta varios tipos de
dato como por ejemplo int long !ool dou!le decimal char string. El segundo permite
recuperar informacin almacenada en formato !inario por medio del m.todo indicado.
,omo as/ que por medio del m.todo indicado8. Lo que sucede con el 9inar#4eader es
que no tiene un m.todo 4ead gen.rico sino que tiene un 4ead para cada tipo de dato que
puede ser escrito por ejemplo 4ead(nt:; 4ead9oolean 4ead,har etc. Esto nos o!liga a
conocer la estructura del archivo con el que estamos tra!ajando para poder leer el tipo de
dato correcto en la posicin correcta.
0 continuacin se muestra un peque<o ejemplo so!re como utili"ar el 9inar#4eader # el
9inar#2riter.
$ileStream fs = ne> $ileStream(?!inario.t't@ $ile%ode.,reate)A
9inar#2riter !> = ne> 9inar#2riter(fs Encoding.UT$B)A
Long codigo,liente = CDBEBDFA
(nt edad = ;;A
!ool puntual = falseA
!>.2rite(codigo,liente)A
!>.2rite(edad)A
!>.2rite(puntual)A
En el ejemplo anterior se o!serva como se puede escri!ir varios tipos de dato con el
mismo m.todo 2rite del o!jeto 9inar#2riter #a que tiene varias so!recargas.
Gepende de la operacin que se va#a a reali"ar con el archivo ser- el modo en que se a!ra
,reate )pen)r,reate 0ppend (0gregar informacin) )pen etc.
0 continuacin se muestra como se ver/a la informacin en el caso de intentar
visuali"arla con un editor de te'to1
+ara leer informacin !inaria se utili"a el o!jeto 9inar#4eader # se utili"a ?El m.todo
indicado@.
$ileStream fs = ne> $ileStream(?!inario.t't@ $ile%ode.)pen)A
9inar#4eader !r = ne> 9inar#4eader(fs)A
,onsole.2rite(?,odigo ,liente1 ? H !r.4ead(ntFD())A
,onsole.2rite(?Edad1 ? H !r.4ead(nt:;())A
,onsole.2rite(?+untual1 ? H !r.4ead9oolean())A
En el ejemplo anterior se o!serva como se utili"a el m.todo de lectura seg*n el tipo de
dato que desee leer lo cual implica que con anterioridad se cono"ca la estructura del
archivo. En este caso ntese que se le# e'actamente en el mismo orden en el que se
escri!i la informacin con el 9inar#2riter.

Anda mungkin juga menyukai