Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用Xamarin在Android上创建文件_C#_Android_Xamarin.android_Xamarin - Fatal编程技术网

C# 无法使用Xamarin在Android上创建文件

C# 无法使用Xamarin在Android上创建文件,c#,android,xamarin.android,xamarin,C#,Android,Xamarin.android,Xamarin,我有一个适用于Android的Xamarin Studio应用程序,我只想下载文件并保存在本地。但是,当我尝试在files文件夹中创建文件时,出现了一个异常: File.Create("data/data/com.company.app/files/newFile.png"); 给我: System.UnauthorizedAccessException Access to the path 'data/data/com.company.app/files/newFile.png' is de

我有一个适用于Android的Xamarin Studio应用程序,我只想下载文件并保存在本地。但是,当我尝试在
files
文件夹中创建文件时,出现了一个异常:

File.Create("data/data/com.company.app/files/newFile.png");
给我:

System.UnauthorizedAccessException
Access to the path 'data/data/com.company.app/files/newFile.png' is denied.

我做错了什么

使用Mono,我想一定和Xamarin Studio中的一样

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
File.Create(path + "newFile.png");

您应该使用Environment或IsolatedStorage。例如:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var filename = Path.Combine(path, "newFile.png");

我终于意识到
File.create()
不是问题所在。我有这样的代码:

string tmpFilePath = FilesDir.AbsolutePath.stringByAppendingPath (f.Path);
Java.IO.File tmpFile = new Java.IO.File( tmpFilePath);
tmpFile.Mkdirs ();
然而,
Mkdirs()
不仅创建了所有的中间目录——正如我所假设的那样——而且还在文件路径本身创建了一个目录。因此无法创建该文件,因为已存在同名目录。 正确的方法是:

string tmpFile = FilesDir.AbsolutePath.stringByAppendingPath (f.Path);
Java.IO.File tmpParentFolder = new Java.IO.File(tmpFile).getParentFile();
tmpParentFolder.Mkdirs ();

在我的辩护中,
FileExistsAndIsDirectory
异常会比
UnauthorizedAccessException

我正在用VS2013编码Xamarin。对于使用我正在编写的应用程序创建的目录,我遇到了拒绝访问错误。我的应用程序通过以下链接创建名为
/storage/emulated/0/POIApp
的目录:

System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "POIApp");

我发现我必须使用VS2013来编辑我的应用程序(POIApp)的“属性”,即右键单击解决方案资源管理器中的项目图标;从弹出菜单中选择属性。新选项卡将出现在VS2013主窗口中。左侧有一些选项,例如应用程序、Android清单、Android选项、构建等。选择“Android清单”。在主面板的底部是“所需权限”部分。当我选中“读取外部存储”和“写入外部存储”时,我的问题就解决了。

向Android.Manifest文件添加以下权限


您正在使用Mac OS X吗?您如何知道“文件”的存在?你在检查这个吗?是的,我在OS X上。我已经在我的测试设备上建立了根目录,并且用根浏览器检查了
文件是否存在。我还使用了Dropbox框架,成功地在那里创建了文件。我只是无法手动创建文件…路径前面不应该有一个前导斜杠吗?这不给我SD卡的文件路径吗?我需要在应用程序包中写入内部存储。请尝试
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)System.Environment不包含GetFolderPath方法