Xamarin: Android: System.UnauthorizedAccessException: se deniega el acceso a la ruta
Así que estoy tratando de crear un archivo y estoy recibiendo System.UnauthorizedAccessException: El acceso a la ruta de acceso "/ DownloadJitters" se deniega. No estoy seguro si es una cosa de los permisos (he intentado una escritura al almacenaje externo en caso de que pero no trabajó) o algo más. También estoy tratando de encontrar un buen lugar para escribir estos archivos como me gustaría que no se encuentran fácilmente. ¿Algunas ideas? Aquí está el código también:
public void favouriteList(MainActivity av, Ordering o, string favouriteName, string totalCost, JittersListView jlv) { //Checks Directory exists if (File.Exists(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt") == false) { Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/"); File.Create(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt"); } if (File.Exists(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/" + favouriteName + ".txt") == false) { var fav = File.Create(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/" + favouriteName + ".txt"); fav.Close(); string file = Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/" + favouriteName + ".txt"; string added = null; int current = 0; while (true) { if (current < jlv.Count) { JittersListItem jli = jlv[current]; added += jli.Top + "|" + jli.Bottom + "|" + jli.itemPic + "|" + jli.itemDes + System.Environment.NewLine; current++; } else { break; } } File.AppendAllText(file, favouriteName + "|" + totalCost + added); } else { new AlertDialog.Builder(av) .SetMessage("Please use a different name, this one has been taken.") .Show(); } }
- Mono para Android: qué marcos de pruebas funcionan
- C # DateTime to String Issue
- ¿Hay algún almacenamiento seguro en Android a través de Monodroid fuera de la caja?
- Arrastrar y soltar en formas Xamarin
- Prevent Orientation change in Xamarin Aplicación para Android
- Programe la notificación usando el administrador de alarmas en formularios xamarin para android
- Monodroid: Realización de un GC completo
- Mono para iOS / Android ¿Abierto o cerrado? ¿Pago o gratis?
- Error incluso si la aplicación parece no estar instalada
- Xamarin ZipAlign no encontrado
- Http sesión siempre se crea en la versión Android ModernHttpClient (okHttp1.5)
- Configuración de la versión de Android
- Async / esperar malas prácticas bajo Android?
Ok I Corregido cambiando la ubicación de ahorro a System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal)
No me pregunte por qué funcionó cuando necesitan los mismos permisos, pero lo hizo.
Esto parece un error de copiar y pegar – deberías aprender a refactorizar código común y expresiones en un valor y reutilizarlo.
//Checks Directory exists if (File.Exists(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt") == false) { Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/"); File.Create(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt"); }
Supongamos que Android.OS.Environment.DirectoryDownloads
tiene el valor /Downloads
. Ahora pasa por el código línea por línea (deberías hacer esto con un depurador):
File.Exists(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt")
El valor del parámetro aquí será "/Downloads/Jitters/FavouritesListAdded.txt"
– OK
Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/");
No hay ninguna barra principal en la cadena literal aquí, por lo que el valor será: /DownloadsJitters/FavouriteList
– Supongo que probablemente quería ser /Downloads/Jitters/FavouriteList
.
En lugar de asegurarse de que las barras diagonales se agreguen a todas las expresiones de 6 rutas en el código, basta con crear una variable con el valor de la ruta y volver a usarla .
- Problemas con android-ffmpeg en Android Lollipop
- Diferentes estilos de colorControlActivated en Android