No se pueden crear archivos en Android con Xamarin
Tengo una aplicación Xamarin-Studio para Android y simplemente quiero descargar archivos y guardarlos localmente. Pero cuando intento crear un archivo en la carpeta de files
me sale una excepción:
File.Create("data/data/com.company.app/files/newFile.png");
Me da
- Monodroid poniendo objetos parcelables en un paquete
- ¿Cómo poner diferentes elementos infantiles personalizados en elementos de lista ampliable?
- 'Jobject' no debe ser IntPtr.Zero al ajustar el texto textview en MonoDroid
- ¿Cómo guardar una imagen en almacenamiento interno y luego mostrarla en otra actividad?
- MVVMCross cambiando ViewModel dentro de un MvxBindableListView
System.UnauthorizedAccessException Access to the path 'data/data/com.company.app/files/newFile.png' is denied.
¿Qué estoy haciendo mal?
- Mono para Android - ¿Cómo funciona?
- Mono Droid onClick evento no encontrado
- ¿Es posible especificar dinámicamente el nombre del paquete durante la compilación?
- Xamarin archivo Android camino a largo
- Xamarin - desconectado del renderizador de diseño
- VM con la versión 1.6.0 no tiene soporte multidex: No se puede encontrar la aplicación Mono.Android.Platform.ApiLevel_23 o Xamarin.Android.Platform
- El gestos de deslizamiento de Android no es confiable
- Resource.Designer.cs: "Recurso ... no contiene una definición para ..."
Debe utilizar Environment o IsolatedStorage. Por ejemplo:
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var filename = Path.Combine(path, "newFile.png");
Estoy codificando Xamarin con VS2013. Tuve el acceso denegado error para un directorio creado con la aplicación que estoy escribiendo. Mi aplicación crea un directorio llamado /storage/emulated/0/POIApp
concatenando vía:
System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "POIApp");
Descubrí que tenía que usar VS2013 para editar las "propiedades" de mi aplicación (POIApp), es decir, hacer clic con el botón derecho del ratón en el icono del proyecto en el explorador de soluciones; Elija las propiedades en el menú emergente. Aparecerá una nueva pestaña en la ventana principal del VS2013. A la izquierda hay algunas opciones, por ejemplo, Aplicación, Manifiesto de Android, Opciones de Android, Construir, etc. Elija "Manifiesto de Android". En la parte inferior del panel principal hay una sección "permisos requeridos". Mi problema se resolvió cuando comprobé "READ_EXTERNAL_STORAGE" y "WRITE_EXTERNAL_STORAGE".
Finalmente me di cuenta de que File.create()
no era el problema. Tenía código como este:
string tmpFilePath = FilesDir.AbsolutePath.stringByAppendingPath (f.Path); Java.IO.File tmpFile = new Java.IO.File( tmpFilePath); tmpFile.Mkdirs ();
Sin embargo, Mkdirs()
no sólo crea todos los directorios intermedios – como yo había asumido – sino que también crea un directorio en la ruta del archivo en sí. Así que el archivo no se pudo crear porque ya había un directorio con el mismo nombre. La forma correcta es:
string tmpFile = FilesDir.AbsolutePath.stringByAppendingPath (f.Path); Java.IO.File tmpParentFolder = new Java.IO.File(tmpFile).getParentFile(); tmpParentFolder.Mkdirs ();
En mi defensa, una excepción FileExistsAndIsDirectory
habría sido mucho más útil que la excepción UnauthorizedAccessException
Agregue el siguiente permiso al archivo Android.Manifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Usando Mono, creo que debe ser el mismo que en Xamarin Studio.
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); File.Create(path + "newFile.png");
- Problema de orientación de la cámara OpenCV
- ¿Cómo puedo extraer la base de datos sqlite desde el dispositivo Android?