none
Error al leer fichero RRS feed

  • Pregunta

  • Buenas veran, resulta que cuando llego a leer el fichero me tira a veces un error desconocido que me lleva a esta linea, y no se la causa.

     if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();

    y el fichero lo leo async

     StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
               StorageFile sampleFile;


                sampleFile = await storageFolder.CreateFileAsync(temp.NombreCategoria+".txt", CreationCollisionOption.OpenIfExists);
                await storageFolder.GetFileAsync(temp.NombreCategoria + ".txt");

    gracias


    miércoles, 23 de enero de 2013 13:06

Respuestas

  • Sólo con ese fragmento es difícil pero imagino que ObtenerAsync() realiza cambios en ColeccionCategoria. Dado que ObtenerAsync() parece asíncrono y que no le estás haciendo await, puede llamarse a ColeccionCategoria antes de que ObtenerAsync() termine.

    El problema puede ser que en algunos cases ColeccionCategoria retorne antes de que ObtenerAsync() termine y por tanto DefaultViewModel["Ítems"] contenga valores incorrectos, a medio construir o directamente nulos, haciendo que la aplicación falle.

    Mi consejo es que revises el código para ver si se te ha olvidado hacerle un await a ObtenerAsync()

    • Marcado como respuesta Adm1990 jueves, 24 de enero de 2013 15:02
    jueves, 24 de enero de 2013 10:15

Todas las respuestas

  • Hola zido45,

    La llamada a GetFileAsync sobra, ya que CreateFileAsync retorna el StorageFile y además el retorno de GetFileAsync no lo estás guardando en ninguna parte. El código podría resumirse en:

                var storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
                var sampleFile = await storageFolder.CreateFileAsync(temp.NombreCategoria + ".txt", CreationCollisionOption.OpenIfExists);
    Respecto al problema, puede ser debido a bastantes cosas. Mi recomendación es que hagas una depuración paso a paso y mires qué llamada exactamente es la que produce el error.
    miércoles, 23 de enero de 2013 15:08
  • vale gracias, en realidad si lo guardo solo que no lo puse aqui, se que es algo del metodo al que llamo, en el cual tengo esto:


            public async void ObtenerAsync()
            {

                for (x = 0; x <= 3; x++)
                {
                    CategoriaRegistro temp = new CategoriaRegistro();
                    if (x == 0)
                    {
                        temp.NombreCategoria = "Pass";
                    }

                    else if (x == 1)
                    {

                        temp.NombreCategoria = "Textos_personales";
                    }

                    else if (x == 2)
                    {

                        temp.NombreCategoria = "Telefonos";
                    }


                    else if (x == 3)
                    {

                        temp.NombreCategoria = "Links";
                    }

                    this.ColeccionCategoria.Add(temp);


                    StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
                    StorageFile sampleFile;


                sampleFile = await storageFolder.CreateFileAsync(temp.NombreCategoria + ".txt", CreationCollisionOption.OpenIfExists);
                    // await storageFolder.GetFileAsync(temp.NombreCategoria + ".txt");

                    //compruebo clave leida anteriormente----------------------------------------------------------------------
                    contenido = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);
                    cadena = contenido.Split('\n');

                    i = 0;
                    while (i <= cadena.Length - 2)
                    {
                        Registro miregistro = new Registro();
                        miregistro.Descripcion = cadena[i];
                        miregistro.Dato = cadena[i + 1];
                        temp.ColeccionRegistros.Add(miregistro);
                        i = i + 2;

                    }

                }
        
            }


    • Editado Adm1990 jueves, 24 de enero de 2013 10:06
    jueves, 24 de enero de 2013 9:32
  • Sólo con ese fragmento es difícil pero imagino que ObtenerAsync() realiza cambios en ColeccionCategoria. Dado que ObtenerAsync() parece asíncrono y que no le estás haciendo await, puede llamarse a ColeccionCategoria antes de que ObtenerAsync() termine.

    El problema puede ser que en algunos cases ColeccionCategoria retorne antes de que ObtenerAsync() termine y por tanto DefaultViewModel["Ítems"] contenga valores incorrectos, a medio construir o directamente nulos, haciendo que la aplicación falle.

    Mi consejo es que revises el código para ver si se te ha olvidado hacerle un await a ObtenerAsync()

    • Marcado como respuesta Adm1990 jueves, 24 de enero de 2013 15:02
    jueves, 24 de enero de 2013 10:15
  • efectivamente era eso, muchas gracias, cambie el metodo para que devolviese task<bool> ( para poder usar el await a la hora de llamarla) y todo ok

    Un saludo

    jueves, 24 de enero de 2013 15:03