[英]Cannot create files on Android with 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 denied.
我究竟做错了什么?
您应该使用 Environment 或 IndependentStorage。 例如:
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var filename = Path.Combine(path, "newFile.png");
我正在使用 VS2013 编写 Xamarin。 对于使用我正在编写的应用程序创建的目录,我遇到了拒绝访问错误。 我的应用程序通过以下方式连接创建了一个名为/storage/emulated/0/POIApp
的目录:
System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "POIApp");
我发现我必须使用VS2013来编辑我的应用程序(POIApp)的“属性”,即在解决方案资源管理器中右键单击项目图标; 从弹出菜单中选择属性。 VS2013 主窗口中会出现一个新选项卡。 左侧有几个选项,例如应用程序、Android 清单、Android 选项、构建等。选择“Android 清单”。 主面板底部是“所需权限”部分。 当我检查“READ_EXTERNAL_STORAGE”和“WRITE_EXTERNAL_STORAGE”时,我的问题解决了。
在 Android.Manifest 文件中添加以下权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我终于意识到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
更有帮助
使用Mono,我觉得应该和Xamarin Studio 一样。
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
File.Create(path + "newFile.png");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.