Xamarin:Android的信息:System.UnauthorizedAccessException:对路径的访问被拒绝 [英] Xamarin : Android : System.UnauthorizedAccessException: Access to the path is denied

查看:2548
本文介绍了Xamarin:Android的信息:System.UnauthorizedAccessException:对路径的访问被拒绝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我想创建一个文件,我得到
 System.UnauthorizedAccessException:对路径/ DownloadJitters被拒绝。我不知道这是否是一个权限的事情(我试过到外部存储器的写入的情况下,但没有工作)或别的东西。我也试着找出一个好地方写这些文件,因为我希望他们不要轻易找到。有任何想法吗?这里的code,以及:

 公共无效favouriteList(MainActivity AV,订货0,字符串favouriteName,串TOTALCOST,JittersListView JLV)
    {
        //检查目录存在
        如果(File.Exists(Android.OS.Environment.DirectoryDownloads +/Jitters/FavouritesListAdded.txt)== FALSE)
        {
            Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads +跳动/ FavouriteList /);
            File.Create(Android.OS.Environment.DirectoryDownloads +/Jitters/FavouritesListAdded.txt);
        }        如果(File.Exists(Android.OS.Environment.DirectoryDownloads +抖动/ FavouriteList /+ favouriteName +名.txt)== FALSE)
        {
            VAR最爱= File.Create(Android.OS.Environment.DirectoryDownloads +抖动/ FavouriteList /+ favouriteName +名.txt);
            fav.Close();
            字符串文件= Android.OS.Environment.DirectoryDownloads +抖动/ FavouriteList /+ favouriteName +名.txt;
            字符串添加= NULL;
            INT电流= 0;
            而(真)
            {
                如果(电流I jlv.Count)
                {
                    JittersListItem JLI = JLV [现行];
                    添加+ = jli.Top +| + jli.Bottom +| + jli.itemPic +| + jli.itemDes + System.Environment.NewLine;
                    当前++;
                }
                其他
                {
                    打破;
                }
            }
            File.AppendAllText(文件,favouriteName +|+ TOTALCOST +加);
        }
        其他
        {
            新AlertDialog.Builder(AV)
                    .SetMessage(请使用不同的名称,这一个已经采取)。
                    。显示();
        }
    }


解决方案

这看起来像一个复制和粘贴的错误 - 你应该学会重构共同code和前pressions到一个值,并重新使用它

  //检查存在的目录
如果(File.Exists(Android.OS.Environment.DirectoryDownloads +/Jitters/FavouritesListAdded.txt)== FALSE)
{
    Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads +跳动/ FavouriteList /);
    File.Create(Android.OS.Environment.DirectoryDownloads +/Jitters/FavouritesListAdded.txt);
}

让我们假设 Android.OS.Environment.DirectoryDownloads 值为 /下载。现在,通过线code线去(你应该真正做到这一点使用调试器):

  File.Exists(Android.OS.Environment.DirectoryDownloads +/Jitters/FavouritesListAdded.txt)

参数值,这里将是/下载/抖动/ FavouritesListAdded.txt - 确定

  Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads +抖动/ FavouriteList /);

有一个在文字字符串没有领先斜线这里,所以值将是: / DownloadsJitters / FavouriteList - 我猜你可能是指它是 /下载/抖动/ FavouriteList

而不是确保斜杠添加到所有6路前pressions在code - 刚刚创建的路径值,一个变量的和重用

So I'm trying to create a file and I'm getting System.UnauthorizedAccessException: Access to the path "/DownloadJitters" is denied. I'm not sure if it's a permissions thing (I've tried a write to external storage in case but that didn't work) or something else. Also I'm trying to figure out a good place to write these files as I would like them not to be easily found. Any ideas? Here's the code as well :

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();
        }
    }

解决方案

This looks like a copy and paste error - you should learn to refactor common code and expressions into one value and reuse it.

//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");
}

Let's assume Android.OS.Environment.DirectoryDownloads has the value /Downloads. Now go through the code line by line (you should really do this with a debugger):

File.Exists(Android.OS.Environment.DirectoryDownloads + "/Jitters/FavouritesListAdded.txt")

The parameter value here will be "/Downloads/Jitters/FavouritesListAdded.txt" - OK

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

There's no leading slash on the literal string here, so the value will be: /DownloadsJitters/FavouriteList - I'm guessing you probably meant it to be /Downloads/Jitters/FavouriteList.

Rather than making sure slashes are added to all 6 path expressions in your code - just create one variable with the path value and reuse it.

这篇关于Xamarin:Android的信息:System.UnauthorizedAccessException:对路径的访问被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆