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(); } } 

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 .

  • ¿Cómo se compara Xamarin para Android (Mono para Android) con el desarrollo nativo de Android?
  • ¿Es posible usar un ListView sin ListActivity en Mono Android?
  • ¿Cómo detectar la salida de la aplicación en android?
  • C: \ Archivos de programa \ MSBuid \ Novell \ Novell.MOnoDroid.Csharp.targets no se encontró
  • El lanzamiento de la aplicación se está estrellando en el lanzamiento de la aplicación con Android 5.1.1 lollipop después de la actualización de xamarin en Visual Studio
  • Convertir una aplicación de control de motor de Delphi 5 en Android - necesita asesoramiento sobre el enfoque
  • Cómo ejecutar código después de un retraso en Xamarin Android
  • ObjectAnimator Proxy para animar TopMargin no puede encontrar setting / getter
  • Xamarin implementación de Android no utiliza el código más reciente?
  • ¿Qué podría estar causando el error "OutputPath propiedad no está establecida para proyecto ProjectName.csproj" en mi proyecto MonoDevelop
  • Subiendo la aplicación MonoDroid a Android Market
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.