C# 无法使用Xamarin在Android上创建文件
我有一个适用于Android的Xamarin Studio应用程序,我只想下载文件并保存在本地。但是,当我尝试在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
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方法