Xamarin:Android:System.UnauthorizedAccessException:拒绝访问路径

Eua*_*dge 13 c# android visual-studio xamarin.android xamarin

所以我正在尝试创建一个文件,我得到System.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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Eua*_*dge 11

好的我通过将保存位置更改为System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)来修复它

不要问我为什么当他们需要相同的权限时才有效,但确实如此.


Led*_*ine 6

由于Android 6.0(API 23),您还需要手动请求权限,因此请在Xamarin.Android项目的MainActivity.cs上添加以下代码:

        if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.WriteExternalStorage }, 0);
        }

        if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != (int)Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage }, 0);
        }
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是我们必须将它放在清单中并放入代码本身..但这有效!非常感谢 (2认同)