所以我正在尝试创建一个文件而且我正在获取 System.UnauthorizedAccessException:拒绝访问路径“/ DownloadJitters”。我不确定它是否是权限(我已经尝试过写入外部存储,但是没有用)或其他东西。此外,我正在试图找出一个写这些文件的好地方,因为我希望它们不容易找到。有任何想法吗?这是代码:
test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true]
答案 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;
}
}