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 objetoFileData
. El código intenta analizar el tamaño del archivo desde la propiedadSize
del objetoFileData
, que es de tipostring
.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étodolong.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
devuelvetrue
, el tamaño del archivo se analizó correctamente y puedes utilizar el valorfileSize
. Si devuelvefalse
, 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