TAGS :Viewed: 10 - Published at: a few seconds ago

[ Problems with Streamwriter ]

I know it sounds really stupid, but I have a really easy application that saves some data from some users on a database, and then I want to write all the data on a .txt file.

The code is as follows:

    List<MIEMBRO> listaMiembros = bd.MIEMBRO.ToList<MIEMBRO>();


    fic.WriteLine("PARTICIPACIONES GRATUITAS MIEMBROS: ");
    mi = new Miembro();
    foreach (MIEMBRO_GRATIS m in listaMiembroGratis)
    {
         mi.setNomMiembro(m.nomMiembro);
         mi.setNumRifa(m.numRifa.ToString());
         fic.WriteLine(mi.ToString());
    }
    fic.WriteLine();

As you see, really easy code. The thing is: I show the information on a datagrid and I know there are lots of more members, but it stops writing in some point.

Is there any number of lines or characters to write on the streamwriter?? Why I can't write all the members, only part of them???

Answer 1


Is there any number of lines or characters to write on the streamwriter??

No, there isn't.

As you see, really easy code. The thing is: I show the information on a datagrid and I know there are lots of more members, but it stops writing in some point

My guess is that your code is throwing an exception and you aren't catching it. I would look at the implementation of setNomMiembro, setNumRifa and ToString in Miembro; which, by the way, in the case of setNomMiembro and setNumRifa should probably be implemented as properties ({get;set;}) and not as methods.

For example, calling ToString in numRifa would throw a null pointer exception if numRifa is null.

Answer 2


fic is probably not being flushed by the time you are looking at the output file; if you instantiate it as the argument for a using block, it will be flushed, closed, and disposed of when you are done.

Also, in case you are flushing properly (but it is not being flushed by the time you are checking the file), you could flush at the end of each iteration:

foreach (MIEMBRO_GRATIS m in listaMiembroGratis)
{
     mi.setNomMiembro(m.nomMiembro);
     mi.setNumRifa(m.numRifa.ToString());
     fic.WriteLine(mi.ToString());
     fic.Flush();
}

This will decrease performance slightly, but it will at least give you an opportunity to see which record is failing to write (if, indeed, an exception is being thrown).