Xamarin : Android : System.UnauthorizedAccessException: der Zugriff auf den Pfad verweigert
So, ich bin versucht, eine Datei zu erstellen und ich bin immer
System.UnauthorizedAccessException: der Zugriff auf den Pfad "/DownloadJitters" verweigert. Ich bin mir nicht sicher, ob es ein Berechtigungs-Sache (habe ich versucht, ein schreiben auf externe Speicher-Fall, aber das hat nicht funktioniert) oder etwas anderes. Auch ich versuche, herauszufinden, ein guter Ort, um schreiben diese Dateien möchte ich Ihnen nicht zu leicht gefunden werden. Irgendwelche Ideen? Hier ist der code :
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();
}
}
- Was die Berechtigungen auf dem Ordner?
- Ehrlich gesagt, weiß ich nicht. Dies ist das erste mal, ich habe versucht eine Datei erstellen
- Id überprüfen, dann auf den Ordner Berechtigungen..
- wie kann ich dies tun, sorry ich bin neu auf der xamarin-api
- verwenden Sie eine Datei-explorer, und überprüfen Sie die Berechtigungen.... scheint die offensichtliche Sache zu prüfen, bedeutet es nicht, dass Sie Rechte haben, zu schreiben, ja?
- Sie benötigen keine Berechtigungen für die Richtigstellung zu den internen Bereichen
- So erhalten Sie eine unberechtigte Ausnahme, Sie sagen uns, Zugriff verweigert, aber es kann nicht sein, Berechtigungen Fehler? ok.. Bitte erklären, dass Logik
- Ja, ich weiß, es macht keinen Sinn. Ich habe gelesen, sagen, dass es könnte bedeuten, dass das Verzeichnis nicht erstellt, aber wenn ich die Datei vorhanden ist Methode, dass es nicht sinnvoll ist, entweder :/
- Ein Ordner könnte sein, dass es ohne die Erlaubnis zu schreiben
- NÖ, nix da
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, I Fixed it, indem Sie den Speicherort zu
System.Umwelt.GetFolderPath(System.Umwelt.SpecialFolder.Personal)
Fragen Sie mich nicht, warum das funktioniert, wenn Sie brauchen die gleichen Berechtigungen, aber es Tat.
Seit Android 6.0 (API 23), müssen Sie auch auf Wunsch die Berechtigungen manuell fügen Sie diesen code in deine MainActivity.cs auf Ihre Xamarin.Android-Projekt:
Dieser sieht aus wie ein copy und paste Fehler - Sie sollten lernen, umgestalten, gemeinsame Codes und Ausdrücke, die in einen Wert und wiederverwenden.
Angenommen
Android.OS.Environment.DirectoryDownloads
hat den Wert/Downloads
. Jetzt gehen Sie durch den code Zeile für Zeile (sollten Sie wirklich tun dies mit einem debugger):Den Wert des Parameters, hier wird
"/Downloads/Jitters/FavouritesListAdded.txt"
- OKEs gibt keinen führenden Schrägstrich auf die Zeichenkette hier, so wird der Wert:
/DownloadsJitters/FavouriteList
- ich vermute, Sie meinte wohl es/Downloads/Jitters/FavouriteList
.Anstatt sicher Schrägstriche Hinzugefügt, um alle 6-Pfad-Ausdrücke im code - erstellen Sie einfach eine variable mit dem Pfad-Wert und wiederverwenden.