Вы находитесь на странице: 1из 28

MANEJO DE ARCHIVOS

FLUJOS
La comunicación entre programa el origen y el destino de cierta información se realiza
mediante flujos de información (en inglés, stream) que no es más que un objeto que
hace de intermediario entre el programa y el origen o el destino de la información, de
esta forma el programa leerá o escribirá en el flujo sin importar desde dónde viene la
información y hacia a dónde va.
FLUJOS
Este nivel de abstracción hace que el programa no tenga que saber nada del
dispositivo, lo que se traduce en una facilidad más a la hora de escribir programas,
puesto que los algoritmos para leer y escribir datos serán siempre más o menos los
mismos.

Leer Escribir
Abrir un flujo desde un fichero Abrir un flujo desde un fichero
Mientras haya información Mientras haya información
Leer la información Escribir la información
Cerrar el flujo Cerrar el flujo
El espacio de nombre System.IO de la biblioteca .Net contiene una colección de
clases que soportan estos algoritmos para leer y escribir.
Por ejemplo la clase FileStream, subclase de Stream, permite leer y escribir datos de
un ficheros byte a byte; análogamente la clase StreamWrite y StreamReader,
subclases de TextWrite y TextReader, respectivamente permiten leer y escribir los
caracteres y las clases BinaryReader y BinaryWrite permiten leer y escribir dato de
cualquier tipo primitivo en binario y cadena de caracteres.

Object

Console TextReader TextWrite Stream

BinaryReader StreamReader StreamWrite FileStream

BinaryWrite
ABRIENDO FICHEROS PARA ACCESO SECUENCIAL
El tipo de acceso más simple a un fichero de datos es el secuencial. Un fichero
abierto para acceso secuencial es un fichero que puede almacenar registros de
cualquier longitud incluso de sólo un Byte. Cuando la información se escribe registro
a registro, éstos son colocados uno a continuación de otro, y cuando se lee, se
empieza por el primer registro y se continúa al siguiente hasta alcanzar el final.

Los datos pueden ser escritos o leídos de un fichero byte a byte utilizando un flujo de
la clase FileStream
FILESTREAM
Permite leer y escribir byte en un fichero, esta clase además de los métodos que
hereda de la clase Stream, proporciona los siguientes constructores.
FileStream SourceStream =new FileStream(string Rutaarchivo , FileMode modo)
FileStream SourceStream =new FileStream(string Rutaarchivo , FileMode modo,
FileAccess acceso)
El parámetro nombre es una cadena de caracteres que especifica la ruta donde está
guardado o se guardará el fichero. Ejemplo
“C:\Temp\Archivo.txt”
SourceStream.Close();
UNA OBSERVACIÓN ACERCA DE LA DECLARACIÓN
DE NOMBRES/RUTAS DE ARCHIVOS EN C#.
Usualmente, la ruta de un archivo contiene el carácter ‘\’, que en C# se utiliza
como carácter de control para símbolos especiales (como el cambio de línea: ‘\n’).

Entendiendo que no es el mismo sentido, se utiliza una sintaxis particular, anteponiendo el símbolo
‘@’ antes del string con la ruta del archivo. Es decir:
FILEMODE
El parámetro Modo, del tipo Enumerado FileMode, puede tomar uno de los siguientes
valores: FileMode Descripción
CreateNew Crear un nuevo fichero. Si el fichero existe, se lanzara una
excepción del tipo IOException.
Create Crear un nuevo fichero. Si el fichero existe lo sobre escribirá.
Open Abrir un fichero existente. Si el fichero no existe, se lanzará un
excepción del tipo FileNotFoundException
OpenOrCreate Abrir un fichero si existe; si no, se crea un nuevo fichero
Truncate Abrir un fichero existente. Una vez abierto el fichero será truncado
a cero byte de longitud.
Append Abrir Fichero para añadir datos al final del mismo si existe, o
crear un nuevo fichero sino existe
El parámetro acceso, del tipo enumerado FileAccess puede tomar uno de los
siguientes valores.

FileMode Descripción
Read Permite acceder al fichero para realizar operaciones de lectura

ReadWrite Permite acceder al fichero para realizar operaciones de lectura y


escritura
Write Permite acceder al fichero para realizar operaciones de escritura
STREAMREADER Y STREAMWRITER
Están diseñadas para lectura y escritura de archivos de texto.
Estas clases se asumen como de un nivel más alto que FileStream.
StreamWriter Writer = new StreamWriter(FileStream SourceStream);
StreamReader Reader = new StreamReader(FileStream SourceStream);

El constructor deja abierto el stream(flujo) para poder recuperar/Guardar la información del


archivo desde la instancia de StreamReader/StreamWrite declarada. Para cerrar un stream o
archivo, se invoca el método Close()

Writer.Close();
Reader.Close();
LECTURA STREAMREADER
FileStream SourceStream = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Read);
StreamReader Lector = new StreamReader(SourceStream);

Metodo Descripción ejemplo


Read() se encarga de leer un caracter a la vez, lo int SigCaracter= Lector.Read()
que permite procesar símbolo por símbolo el contenido
del archivo. Cuando se encuentra con el fin de archivo,
retorna un valor –1, considerando que su retorno
es siempre un int (y no un char).
ReadLine() lee una línea completa de un archivo de texto hasta el string linea = Lector.ReadLine()
cambio de línea más próximo
ReadToEnd() acumula la información que hay desde string linea = Lector.ReadToEnd()
la lectura anterior (que pudo haberse hecho con
ReadLine(), por ejemplo) hasta el final del archivo,
todo en el mismo string.
ESCRITURA STREAMWRITE
FileStream SourceStream = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Read);
StreamWrite Escritor = new StreamWrite(SourceStream);
Metodo Descripción ejemplo
Write() Escribe texto en el char caracter = 'T’;
Stream Escritor.Write(caracter);

char[] caracteres = new char[100];


for (int i = 0; i < 100; i++) caracteres[i] = '+';
Writer.Write(caracteres);
WriteLine() escribe una línea string linea = “Texto de prueba”;
completa de un archivo Escritor.WriteLine(linea);
de texto y hace el
cambio de línea Escritor.WriteLine(“Los valores son: {0} y {1}”, 3, 5);
GUARDAR ANTERIOR
Escribir
Abrir un flujo desde un fichero
Escribir la información
Cerrar el flujo
PASO A PASO CONSULTAR
public List<Empleado> Consultar()
{
return Empleados;
}
public List<Empleado> Consultar()
{
Empleados = new List<Empleado>(); 1. Abrir el archivo
2. Mientras que haya información
3. (string)Leer cada línea
return Empleados; 4. (Empleado)Guardarla en la Lista de Empleado
} 5. Cerrar el archivo
public List<Empleado> Consultar()
{
Empleados = new List<Empleado>();

FileStream SourceStream = new FileStream(FileName,FileMode.OpenOrCreate, FileAccess.Read);


StreamReader Reader = new StreamReader(SourceStream);
Reader.Close();
SourceStream.Close();
1. Abrir el archivo
return Empleados;
}
5. Cerrar el archivo
public List<Empleado> Consultar()
{
Empleados = new List<Empleado>();

FileStream SourceStream = new FileStream(FileName,FileMode.OpenOrCreate, FileAccess.Read);


StreamReader Reader = new StreamReader(SourceStream);

string Linea = string.Empty;


Linea = Reader.ReadLine(); Necesitamos leer todo el
archivo no una linea
Reader.Close();
SourceStream.Close();

return Empleados;
}
public List<Empleado> Consultar()
{
Empleados = new List<Empleado>();

FileStream SourceStream = new FileStream(FileName,FileMode.OpenOrCreate, FileAccess.Read);


StreamReader Reader = new StreamReader(SourceStream);

string Linea = string.Empty;


while ((Linea = Reader.ReadLine())!= null)
{
1. Abrir el archivo
2. Mientras que haya información
}
Reader.Close();
SourceStream.Close();
5. Cerrar el archivo
return Empleados;
}
PROBLEMA
StreamLine() devuelve un String y para guardar en la lista necesito un objeto de tipo
empleado para agregarlos a la lista de empleados

“1,ANA,PADILLA,1000000”
MAPEAR DE STRING A UN OBJETO
“1,ANA,PADILLA,1000000” Empleado:Empleado
Identificacion:1
Nombre:ANA
Apellido:Padilla
Sueldo:100000

1. Pasar el string a un Array de string cada separada por


coma
2. Asignar a cada propiedad del objeto la respectiva
posición del Array
3. Guardar el objeto en la lista
MAPEAR DE STRING A UN OBJETO
char delimiter = ',';
string[] DatosEmpleado = Linea.Split(delimiter);

“1,ANA,PADILLA,1000000” DatosEmpleado={1,ANA,PADILLA,1000000}

1. Pasar el string a un array de string cada separada por


coma
char delimiter = ',';
string[] DatosEmpleado = Linea.Split(delimiter);

Empleado empleado = new Empleado();


empleado.Identificacion = DatosEmpleado[0];
empleado.Nombre = DatosEmpleado[1];
empleado.Apellido = DatosEmpleado[2];
empleado.Sueldo = Convert.ToDecimal(DatosEmpleado[3]);

Empleado:Empleado
DatosEmpleado={1,ANA,PADILLA,1000000}
Identificacion:1
Nombre:ANA
Apellido:Padilla
2. Asignar a cada propiedad del objeto la Sueldo:100000
respectiva posición del Array
while ((Linea = Reader.ReadLine())!= null)
{
char delimiter = ',';
string[] DatosEmpleado = Linea.Split(delimiter);

Empleado empleado = new Empleado();


empleado.Identificacion = DatosEmpleado[0];
empleado.Nombre = DatosEmpleado[1];
empleado.Apellido = DatosEmpleado[2];
empleado.Sueldo = Convert.ToDecimal(DatosEmpleado[3]);

Empleados.Add(empleado);
} Empleado:Empleado
Identificacion:1
Nombre:ANA
Apellido:Padilla
3. Guardar el objeto en la lista Sueldo:100000

Вам также может понравиться