cod*_*nd1 11 c# android xamarin.android xamarin
我有一个适用于Android的Xamarin-Studio应用程序,我只想下载文件并在本地保存.但是当我尝试在files
文件夹中创建一个文件时,我得到一个例外:
File.Create("data/data/com.company.app/files/newFile.png");
Run Code Online (Sandbox Code Playgroud)
给我:
System.UnauthorizedAccessException
Access to the path 'data/data/com.company.app/files/newFile.png' is denied.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
SKa*_*all 16
您应该使用Environment或IsolatedStorage.例如:
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var filename = Path.Combine(path, "newFile.png");
Run Code Online (Sandbox Code Playgroud)
小智 7
我正在用VS2013编写Xamarin代码.对于使用我正在编写的应用程序创建的目录,我有访问被拒绝错误.我的应用程序/storage/emulated/0/POIApp
通过连接来创建一个名为的目录:
System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "POIApp");
Run Code Online (Sandbox Code Playgroud)
我发现我必须使用VS2013来编辑我的应用程序的"属性"(POIApp),即右键单击解决方案资源管理器中的项目图标; 从弹出菜单中选择属性.VS2013主窗口中会出现一个新选项卡.左侧有几个选项,例如Application,Android Manifest,Android Options,Build等.选择"Android Manifest".在主面板的底部是"必需权限"部分.当我检查"READ_EXTERNAL_STORAGE"和"WRITE_EXTERNAL_STORAGE"时,我的问题解决了.
我终于意识到这File.create()
不是问题所在。我有这样的代码:
string tmpFilePath = FilesDir.AbsolutePath.stringByAppendingPath (f.Path);\nJava.IO.File tmpFile = new Java.IO.File( tmpFilePath);\ntmpFile.Mkdirs ();\n
Run Code Online (Sandbox Code Playgroud)\n\n然而,Mkdirs()
不仅像我假设的 \xe2\x80\x93 那样创建所有中间目录 \xe2\x80\x93\xc2\xa0 ,而且还在文件路径本身创建一个目录。因此无法创建该文件,因为已经存在同名目录。\n正确的方法是:
string tmpFile = FilesDir.AbsolutePath.stringByAppendingPath (f.Path);\nJava.IO.File tmpParentFolder = new Java.IO.File(tmpFile).getParentFile();\ntmpParentFolder.Mkdirs ();\n
Run Code Online (Sandbox Code Playgroud)\n\n在我看来,FileExistsAndIsDirectory
例外会比UnauthorizedAccessException