Xamarin: Android: Система.UnauthorizedAccessException: доступ к пути запрещен
поэтому я пытаюсь создать файл, и я получаю Система.UnauthorizedAccessException: доступ к пути "/DownloadJitters" запрещен. Я не уверен, что это вещь разрешений (я пробовал писать на внешнее хранилище, но это не сработало) или что-то еще. Также я пытаюсь найти хорошее место для записи этих файлов, так как я хотел бы, чтобы их было нелегко найти. Есть идеи? Вот код :
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();
}
}
2 ответов
Ok я исправил это, изменив место сохранения на Система.Окружающая среда.GetFolderPath (System.Окружающая среда.SpecialFolder.Личное)
Не спрашивайте меня, почему это сработало, когда им нужны те же разрешения, но это так.
это выглядит как скопировать и вставить ошибка - вы должны научиться рефакторинг общий код и выражений в одно значение и использовать его.
//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");
}
предположим Android.OS.Environment.DirectoryDownloads
имеет значение /Downloads
. Теперь пройдите код строка за строкой (вы действительно должны сделать это с помощью отладчика):
File.Exists(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt")
значение параметра здесь будет "/Downloads/Jitters/FavouritesListAdded.txt"
- OK
Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "Jitters/FavouriteList/");
здесь нет ведущей косой черты в строке литерала, поэтому значение будет:/DownloadsJitters/FavouriteList
- Я предполагаю, что вы наверное, имел в виду /Downloads/Jitters/FavouriteList
.
вместо того, чтобы убедиться, что косые черты добавляются ко всем 6 выражениям пути в коде-просто создайте одну переменную со значением пути и повторно.