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

时间:2015-07-31 12:57:25

标签: c# android visual-studio xamarin xamarin.android

所以我正在尝试创建一个文件而且我正在获取  System.UnauthorizedAccessException:拒绝访问路径“/ DownloadJitters”。我不确定它是否是权限(我已经尝试过写入外部存储,但是没有用)或其他东西。此外,我正在试图找出一个写这些文件的好地方,因为我希望它们不容易找到。有任何想法吗?这是代码:

test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true]

5 个答案:

答案 0 :(得分:11)

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

不要问我为什么当他们需要相同的权限时才能工作,但确实如此。

答案 1 :(得分:4)

由于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);
        }

答案 2 :(得分:0)

这看起来像是一个复制和粘贴错误 - 您应该学习将公共代码和表达式重构为一个值并重用它。

//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" - 确定

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

这里的文字字符串没有前导斜杠,因此值为:/DownloadsJitters/FavouriteList - 我猜你可能认为它是/Downloads/Jitters/FavouriteList

而不是确保在代码中的所有6个路径表达式中添加斜杠 - 只需使用路径值创建一个变量并重复使用

答案 3 :(得分:0)

如果您仍然在Xamarin Android中获取用于写入或读取文件的UnauthorizedAccessException。我刚写文章解决了 http://bsubramanyamraju.blogspot.com/2019/12/resolved-unauthorizedaccessexception.html

答案 4 :(得分:0)

Xamarin.Forms(Android解决方案)

MainActivity.cs

  • 对于面向Android 5.1(API级别22)或更低版本的应用,无需执行任何其他操作。
  • 将在Android 6.0(API 23级别23)或更高版本上运行的应用应询问运行时权限检查。
protected override void OnCreate(Bundle bundle)
{
    if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
    {
        if (!(CheckPermissionGranted(Manifest.Permission.ReadExternalStorage) && !CheckPermissionGranted(Manifest.Permission.WriteExternalStorage)))
        {
            RequestPermission();
        }
    }
    LoadApplication(new App());
}

private void RequestPermission()
{
    ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage }, 0);
}

public bool CheckPermissionGranted(string Permissions)
{
    // Check if the permission is already available.
    if (ActivityCompat.CheckSelfPermission(this, Permissions) != Permission.Granted)
    {
        return false;
    }
    else
    {
        return true;
    }
}