1

tengo este codigo

StreamReader productosfile;
string linea;
string[] corte = new string[6];
productosfile = File.OpenText("productos.txt");
if (File.Exists("productos.txt"))
{
    do
    {
        linea = productosfile.ReadLine();
        corte = linea.Split('|');
        Producto producto = new Producto(corte[0], 
        Convert.ToInt32(corte[1]),
        DateTime.Parse(corte[2]), Convert.ToInt32(corte[3]),
        Convert.ToDecimal(corte[4]), corte[5], corte[6]);
        productos.Add(producto);

     } while (linea != null);
}

y me salta ese error aqui corte = linea.Split('|'), antes los tenia sin los new, y busque en foros y decian que ese error era por no instanciar la clase, ahora que la instancio porque sigue pasango?

nota: al poner un control de exepciones, me arroja la exepcion pero el codigo hace lo que quiero, lee el txt corta las lineas instancia la clase producto y la agrega perfectamente a la lista. Pero igual me sigue fastidiando que ese error sigue mostrandose

Marcel Salazar
  • 137
  • 1
  • 1
  • 11
  • 1
    tu archivo productosfile tiene contenido? ya que al parecer linea es igual a null cuando utilizas split – Shassain Sep 06 '18 at 00:55

1 Answers1

2

Muy buenas, te pongo el código con unos comentarios de los errores que he encontrado

StreamReader productosfile;
string linea;
string[] corte;//No es necesario inicializar nada ya que posteriormente le asignas un nuevo objeto.

if (File.Exists("productos.txt"))//La comprobación de si existe el fichero debes hacerla antes de intentar abrirlo para lectura.
{
     productosfile = File.OpenText("productos.txt");
     while(!productosfile.EndOfStream) //Con este while iteramos hasta el final del archivo y evita la excepción que te estaba dando intentando leer mas datos cuando no los tienes en el fichero.
     {
         linea = productosfile.ReadLine();
         corte = linea.Split('|');
         Producto producto = new Producto(corte[0],
                        Convert.ToInt32(corte[1]),
                        DateTime.Parse(corte[2]), Convert.ToInt32(corte[3]),
                        Convert.ToDecimal(corte[4]), corte[5], corte[6]);
         productos.Add(producto);

      } 
}

Un saludo, y cualquier duda pregunta en los comentarios.

ElGerar
  • 1,926
  • 2
  • 13
  • 20
  • Muchas gracias, hace unos dias pensaba si era mejor poner un while en vez de un do while, en efecto, ya que con el do while lee la linea y el split no encuentra nada que cortar y salta el error. De nuevo muchas gracias por las aclaraciones. – Marcel Salazar Sep 06 '18 at 15:20