2015-07-31 9 views
5

Próbuję utworzyć plik i otrzymuję System.UnauthorizedAccessException: Dostęp do ścieżki "/ DownloadJitters" jest zabroniony. Nie jestem pewien, czy to jest kwestia uprawnień (próbowałem pisać do zewnętrznej pamięci masowej w przypadku, ale to nie działało) lub coś innego. Próbuję również znaleźć dobre miejsce do napisania tych plików, ponieważ chciałbym, aby nie można było ich łatwo znaleźć. Jakieś pomysły? Oto kod, a także:Xamarin: Android: System.UnauthorizedAccessException: Dostęp do ścieżki jest zabroniony

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

Co to są uprawnienia do folderu? – BugFinder

+0

Szczerze mówiąc, nie wiem. To jest pierwszy raz, gdy próbowałem utworzyć plik –

+0

Sprawdzam ID, a następnie uprawnienia do folderów .. – BugFinder

Odpowiedz

6

Ok mam stałe, zmieniając lokalizację zapisu do System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal)

nie pytaj mnie dlaczego, że pracował, kiedy potrzebują one takie same uprawnienia, ale to nie .

+0

Idzie, aby udowodnić, że jest w jakiś sposób uprawnieniami do folderu/Download. – BugFinder

+0

To jest do przechowywania w pamięci wewnętrznej specyficznej dla aplikacji .. @Euan pytanie było inne .. Właściwie to on próbuje przechowywać w pamięci zewnętrznej .. – Takermania

0

To wygląda błędu skopiować i wkleić - trzeba nauczyć się byłaby wspólny kod i wyrażeń w jedną wartość i używać go.

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

Załóżmy Android.OS.Environment.DirectoryDownloads ma wartość /Downloads. Teraz przejdź przez linię kodu po linii (naprawdę powinieneś to zrobić z debuggera):

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

Wartość parametru tutaj będzie "/Downloads/Jitters/FavouritesListAdded.txt" - OK

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

Nie ma wiodący ukośnik na literalnym ciągiem tutaj, więc wartość będzie: /DownloadsJitters/FavouriteList - Zgaduję, że prawdopodobnie miałeś to być /Downloads/Jitters/FavouriteList.

Zamiast dodawać ukośniki do wszystkich 6 wyrażeń ścieżki w kodzie - po prostu utwórz jedną zmienną o wartości ścieżki i ponownie użyj jej.

+0

ok Dodałem w ukośnikach i błąd nadal występuje:/z wyjątkiem zamiast "/ DownloadJitters" jego tylko "/ Pobierz" –

+0

Ten sam błąd? Z tą samą ścieżką? – adelphus

+0

Poprawiono komentarz powyżej tego samego błędu, ale z "/ Download" jako ścieżką –