CLR: .Net / Mono / Boo / Otros CLR > C#

 C# flujo de archivos binarios

(1/1)

Chuy1994:
Alguien que me pudiera ayudar con este programa, el problema es cuando agrego 2 registros y elimino uno de ellos y al desplegarlos me marcar error

aqui esta mi codigo:

--- Código: C# --- using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO; namespace ConsoleApplication1{     public class Empleado    {        private string nombre, puesto, domicilo, email, telefono;        private float sueldo;         public Empleado()        { }        // constructor por default         public Empleado(string n, string p, float s, string dom, string tel, string eml) //constructor empleado        {            nombre = n;            puesto = p;            sueldo = s;            domicilo = dom;            telefono = tel;            email = eml;         }         public void asignaNombre(string n)                { nombre = n; }         public string obtenNombre()        { return nombre; }         public void asignaPuesto(string p)        { puesto = p; }         public string obtenPuesto()        { return puesto; }         public void asignaSueldo(float s)        { sueldo = s; }         public float obtenSueldo()        { return sueldo; }         public void asgniaDomicilio(string dom)        { domicilo = dom; }         public string obtenDomicilio()        { return domicilo; }         public void asignaTelefono(string tel)        { telefono = tel; }         public string obtenTelefono()        { return telefono; }         public void asignaEmail(string eml)        { email = eml; }         public string obtenEmail()        { return email; }        }     public class ArchivoEmpleados    {        private FileStream fs=null; //Flujo base.        private BinaryWriter bw=null; // Flujo de escritura        private BinaryReader br=null; // Flujo de lectura        public ushort nregs; // Numero de registros en el archivo        public static ushort tamanoRegistro = 82; //Tamano del registro, en bytes, se agregan 2 bytes por cada string.        public ushort c;        public string n, p, dom, emal, tel;        public float s;         public ArchivoEmpleados(string archivo)//Constructor archivo        {            fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.ReadWrite);            bw = new BinaryWriter(fs);            br = new BinaryReader(fs);            nregs = (ushort)Math.Ceiling((double)fs.Length / (double)tamanoRegistro);        }         public void cierraArchivo()        {            bw.Close();            br.Close();            fs.Close();        }         public ushort obtenNumeroDeRegistros()        { return nregs; }         public void escribeRegistro(ushort clave, Empleado empleado)        {             if (clave > 0 && clave <= (nregs + 1))            {                bw.BaseStream.Seek((clave - 1) * tamanoRegistro, SeekOrigin.Begin);                bw.Write(empleado.obtenNombre());                bw.Write(empleado.obtenPuesto());                bw.Write(empleado.obtenSueldo());                bw.Write(empleado.obtenDomicilio());                bw.Write(empleado.obtenTelefono());                bw.Write(empleado.obtenEmail());            }             else            { Console.WriteLine("Clave incorrecta..."); }        }         public void captura()        {            try            {                Console.Write("Nombre: ");                n = Console.ReadLine();                n = n.PadRight(50);                Console.Write("Puesto: ");                p = Console.ReadLine();                p = p.PadRight(20);                Console.Write("Sueldo: ");                s = Single.Parse(Console.ReadLine());                Console.Write("Domicilio: ");                dom = Console.ReadLine();                dom = dom.PadRight(100);                Console.Write("Telefono: ");                tel = Console.ReadLine();                Console.Write("Email: ");                emal = Console.ReadLine();                emal = emal.PadRight(100);            }            catch (FormatException fex)            {                Console.WriteLine("nMensaje del Error: " + fex.Message);                Console.WriteLine("nRuta del Error: " + fex.StackTrace);                Console.WriteLine("nPresione <Enter> para Continuar... ");                Console.ReadKey();            }        }         public void anadeRegistro(Empleado empleado)        {            nregs++;            bw.BaseStream.Seek(nregs * tamanoRegistro, SeekOrigin.Begin);            captura();            escribeRegistro(nregs, new Empleado(n, p, s, dom, tel, emal));        }         public Empleado leeRegistro(ushort reg)        {            if (reg >= 0 && reg < nregs)            {                br.BaseStream.Seek(reg * tamanoRegistro,SeekOrigin.Begin);                n = br.ReadString();                p = br.ReadString();                s = br.ReadSingle();                dom = br.ReadString();                tel = br.ReadString();                emal = br.ReadString();                return new Empleado(n, p, s, dom, tel, emal);            }             else            {                Console.WriteLine("Clave incorrecta...");                return null;            }        }         public void buscaRegistro()        {            try            {                do                {                    Console.Write("Clave: ");                    c = UInt16.Parse(Console.ReadLine());                }while (c < 1 && c > nregs);                 br.BaseStream.Seek((c - 1) * tamanoRegistro, SeekOrigin.Begin);                n = br.ReadString();                n = n.TrimEnd(' ');                p = br.ReadString();                p = p.TrimEnd(' ');                s = br.ReadSingle();                dom = br.ReadString();                dom = dom.TrimEnd(' ');                tel = br.ReadString();                tel = tel.TrimEnd(' ');                emal = br.ReadString();                emal = emal.TrimEnd(' ');                Console.Clear();                Console.Write("nClave> " + c);                Console.Write("nNombre: " + n);                Console.Write("nPuesto: " + p);                Console.Write("nSueldo: {0:F2} ", s);                Console.Write("nDomicilio: " + dom);                Console.Write("nTelefono: " + tel);                Console.Write("nEmail: " + emal);                Console.WriteLine("nnPresione <Enter> para Continuar...");                Console.ReadLine();                br.BaseStream.Seek((c - 1) * tamanoRegistro, SeekOrigin.Begin);            }             catch (FormatException fex)            {                Console.WriteLine("nMensaje del Error: " + fex.Message);                Console.WriteLine("nRuta del Error: " + fex.StackTrace);                Console.WriteLine("nPresione <Enter> para Continuar... ");                Console.ReadKey();             }             catch (IOException ioex)            {                Console.WriteLine("nMensaje del Error: " + ioex.Message);                Console.WriteLine("nRuta del Error: " + ioex.StackTrace);                Console.WriteLine("nPresione <Enter> para Continuar... ");                Console.ReadKey();            }        }         public void cambiaRegistro()        {            buscaRegistro();            Console.Write("nDesea cambiarlo(S/N)? : ");            char op;             do            {                op = (char)Console.Read();                op = Char.ToUpper(op);            }             while (op != 'N' && op != 'S');             Console.ReadLine();             if (op == 'S')            {                captura();                Empleado e = new Empleado(n, p, s, dom, tel, emal);                escribeRegistro((ushort)(c), e);            }        }         public void desplieguaRegistros()        {            Console.Clear();            int i;            for (i = 0; br.BaseStream.Length != br.BaseStream.Position; i++)            {                br.BaseStream.Seek(i * tamanoRegistro, SeekOrigin.Begin);                n = br.ReadString();                n = n.TrimEnd(' ');                p = br.ReadString();                p = p.TrimEnd(' ');                s = br.ReadSingle();                dom = br.ReadString();                dom = dom.TrimEnd(' ');                tel = br.ReadString();                tel = tel.TrimEnd();                emal = br.ReadString();                emal = emal.TrimEnd(' ');                 Console.Write("nn------------------------nClave: " + (i + 1));                Console.Write("nNombre: " + n);                Console.Write("nPuesto: " + p);                Console.Write("nSueldo: {0:F2}", s);                Console.Write("nDomicilio: " + dom);                Console.Write("nTelefono: " + tel);                Console.Write("nEmail: " + emal);            }             Console.WriteLine("nnPresione <Enter> para Continuar...");            Console.ReadLine();            br.BaseStream.Seek(0, SeekOrigin.Begin);        }         public void eliminaRegistro()        {            buscaRegistro();            Console.Write("nDesea elimiarlo? (S/N): ");            char op;             do            {                op = (char)Console.Read();                op = Char.ToUpper(op);            }             while (op != 'N' && op != 'S');             if (op == 'S')            {                n = "Registro Eliminado";                n = n.PadRight(50);                p = "Registro Eliminado";                p = p.PadRight(50);                s = 0;                Empleado e = new Empleado(n, p, s, dom, tel, emal);                escribeRegistro(c, e);            }        }    }     public class Principal    {        static ArchivoEmpleados arEmp;         public static char menu()        {            Console.Clear();            Console.WriteLine("A.- Agregar. ");            Console.WriteLine("B.- Buscar. ");            Console.WriteLine("C.- Cambiar. ");            Console.WriteLine("D.- Desplegar. ");            Console.WriteLine("E.- Eliminar. ");            Console.WriteLine("S.- Salir. ");            Console.Write("nOpcion: ");             char op;            op = (char)Console.Read();            op = Char.ToUpper(op);             Console.WriteLine(); Console.ReadLine();            return op;        }         public static void Main(string[] args)        {            string archivo = "Empleados.dat";            arEmp = new ArchivoEmpleados(archivo);            char opcion;             do            {                opcion = menu();                opcion = Char.ToUpper(opcion);                 switch (opcion)                {                     case 'A':                        {                            arEmp.anadeRegistro(new Empleado(arEmp.n, arEmp.p, arEmp.s, arEmp.dom, arEmp.tel, arEmp.emal));                        }                        break;                     case 'B':                        { arEmp.buscaRegistro(); }                        break;                     case 'C':                        { arEmp.cambiaRegistro(); }                        break;                     case 'D':                        { arEmp.desplieguaRegistros(); }                        break;                     case 'E':                        { arEmp.eliminaRegistro(); }                        break;                     case 'S':                        {                            arEmp.cierraArchivo();                            Console.Clear();                            Console.WriteLine("Fin del Programa!!!");                            Console.WriteLine("nPresione <Enter> para Salir..");                            Console.ReadLine();                        }                         break;                     default:                        {                            Console.WriteLine("Opcion no valida! Presione <Enter> para continuar..");                            Console.ReadKey();                        }                        break;                }            }             while (opcion != 'S');        }    }}      

Navegación

[0] Índice de Mensajes

Ir a la versión completa