2015-07-31 19 views
5

Yani bir dosya oluşturmaya çalışıyorum ve System.UnauthorizedAccessException alıyorum: "/ DownloadJitters" yoluna erişim reddedildi. Bir izin nesnesi olup olmadığından emin değilim (bir durumda harici depolamaya yazdım ama işe yaramadı) ya da başka bir şey. Ayrıca, bu dosyaları kolayca bulunmamasını istediğim gibi yazmak için iyi bir yer bulmaya çalışıyorum. Herhangi bir fikir? İşte kod yanı var:Xamarin: Android: System.UnauthorizedAccessException: Bu yola erişim reddedildi

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

Klasördeki izinler nedir? – BugFinder

+0

Dürüst olmak gerekirse bilmiyorum. Bu dosya ilk kez –

+0

Kimlik denetimi daha sonra klasör izinleri oluşturmayı denedim .. – BugFinder

cevap

6

Tamam ben System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) o çalıştı neden aynı izinlere gerektiğinde

sorma için kayıt yerini değiştirerek Sabit ama did .

+0

Bir şekilde/Download klasörü sorununa bir şekilde onun izinlerini kanıtlamaya çalışır. – BugFinder

+0

Bu, uygulamaya özgü dahili bellekte depolamak içindir. @ Soru sorusu farklıydı .. Aslında harici bellekte mağaza çalışıyor .. – Takermania

0

Bu kopyalanıp yapıştırılmış bir hata gibi görünüyor - Eğer tek bir değerde ortak kod ve ifadeler refactor ve yeniden kullanmak öğrenmelidir.

//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"); 
} 

en Android.OS.Environment.DirectoryDownloads değerini /Downloads olduğunu varsayalım. Şimdi (Eğer gerçekten bir hata ayıklayıcı ile yapmalısınız) satır satır kod geçmesi:

File.Exists(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt") 

burada parametre değeri "/Downloads/Jitters/FavouritesListAdded.txt" olacak - Tamam

Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/"); 

hiçbir lider çizgi değişmez dizesi var Burada, değer: /DownloadsJitters/FavouriteList - Tahminimce muhtemelen /Downloads/Jitters/FavouriteList olmalıdır.

Kodunuzdaki tüm 6 yol ifadesine eğik çizgi eklendiğinden ziyade, yol değeriyle bir değişken oluşturun ve yeniden'u yeniden kullanın.

+0

tamam ben eğik çizgi ekledim ve hata hala oluşur:/"/ DownloadJitters" onun yerine sadece "/ Download" –

+0

Aynı hata? Aynı yolla mı? – adelphus

+0

Aynı hata düzeltildi, ancak "/ Download" yolu ile yol –

İlgili konular