Xamarin:Android的信息:System.UnauthorizedAccessException:对路径的访问被拒绝 [英] Xamarin : Android : System.UnauthorizedAccessException: Access to the path is denied
问题描述
所以我想创建一个文件,我得到
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屋!