Obtener "La cadena de entrada no estaba en un formato correcto" con el selector de archivos

Estoy tratando de elegir un archivo usando el siguiente código

                            FileData fileData = new FileData();

                            fileData = await CrossFilePicker.Current.PickFile();

                            if (fileData != null)

y conseguir la siguiente excepción

  at System.Number.ThrowOverflowOrFormatException (System.Boolean overflow, System.String overfl

owResourceKey) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corert/src/System.Private.CoreLib/shared/System/Number.Parsing.cs:1781 
  at System.Number.ParseInt64 (System.ReadOnlySpan`1[T] value, System.Globalization.NumberStyles styles, System.Globalization.NumberFormatInfo info) [0x00016] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corert/src/System.Private.CoreLib/shared/System/Number.Parsing.cs:246 
  at System.Int64.Parse (System.String s) [0x0000a] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Int64.cs:106 
  at Plugin.FilePicker.IOUtil.GetPath (Android.Content.Context context, Android.Net.Uri uri) [0x000ab] in D:\a\1\s\src\Plugin.FilePicker\Android\IOUtil.android.cs:64 
  at Plugin.FilePicker.FilePickerActivity.OnActivityResult (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x00039] in D:\a\1\s\src\Plugin.FilePicker\Android\FilePickerActivity.android.cs:151 
--- End of stack trace from previous location where exception was thrown ---

y el mensaje de excepción diciendo "La cadena de entrada no estaba en un formato correcto".

Lo estoy intentando por tanto tiempo, pero no puedo encontrar la solución.

Versión para Android - 10

Pregunta hecha hace 3 años, 4 meses, 28 días - Por logiclinguist


3 Respuestas:

  • Estoy usando la última versión estable para Xamarin. Esenciales pero FilePickerAsync() no es accesible.

    En la última versión para Xamarin. Esenciales, para conseguir:

    using Xamarin.Essentials;
    
    public async void getFile()
    {
        var result = await FilePicker.PickAsync();
    
        //...
    }
    

    El ReadExternalStorage se requiere permiso:

    
    

    Referencia: Xamarin. Esenciales: Elijador de archivos

    Respondida el Dec 19, 2020 a las 13:48 - por devguru123

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando puede estar relacionado con la conversión de la ruta del archivo seleccionado en el dispositivo Android. El mensaje de excepción "La cadena de entrada no estaba en un formato correcto" sugiere que existe un problema al intentar convertir una cadena a un formato específico, como un entero.

    Para solucionar este problema, te recomendaría revisar la implementación en la clase IOUtil en la línea 64, donde parece que se está intentando parsear una cadena a un entero (Int64) y está fallando. Asegúrate de que la conversión de la ruta del archivo seleccionado se esté realizando de manera correcta y que la cadena esté en el formato esperado para ser convertida a un entero.

    Además, te recomendaría verificar la documentación oficial del plugin que estás utilizando para seleccionar archivos en Xamarin y Android, para asegurarte de estar utilizando los métodos y propiedades de manera correcta.

    Si después de revisar tu implementación, sigues experimentando el problema, intenta depurar el código paso a paso para identificar exactamente en qué paso se produce el error y así poder encontrar una solución más específica.

    Espero que esta información te sea de ayuda para resolver el problema que estás enfrentando. ¡Déjame saber si tienes alguna otra pregunta o duda!

    Respondida el Dec 20, 2020 a las 13:49 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El mensaje de error "La longitud de los datos no es un número correcto" indica que el código está intentando analizar un valor numérico de una cadena que no tiene un formato numérico válido.

    En tu código específico, el error ocurre en la línea:

    
    fileData = await CrossFile.Current.PickFile();
    

    La propiedad PickFile devuelve un objeto FileData. El código intenta analizar el tamaño del archivo desde la propiedad Size del objeto FileData, que es de tipo string.

    Para resolver este problema, asegúrate de que la propiedad Size contiene un valor numérico válido antes de intentar analizarlo. Puedes utilizar el método long.TryParse para comprobar si la cadena se puede analizar como un número entero de 64 bits:

    
    if (long.TryParse(fileData.Size, out long fileSize))
    {
        // El tamaño del archivo se analizó correctamente
    }
    else
    {
        // El tamaño del archivo no se pudo analizar
    }
    

    Si long.TryParse devuelve true, el tamaño del archivo se analizó correctamente y puedes utilizar el valor fileSize. Si devuelve false, el tamaño del archivo no se pudo analizar y debes manejar este caso de error adecuadamente.

    Respondida el Dec 20, 2020 a las 13:51 - por Gemini

    Votos positivos: 0 | Votos negativos: 0