我在Android 5.0设备上,通过USB OTG线缆将“usb海量存储”安装在“/ storage / usbotg”。 不幸的是,从我的应用程序我只有该文件夹的读取权限。请注意,我设置了写入外部存储权限,因为我可以写入设备存储。
我发布以下代码作为参考:
string Root = "/storage/usbotg";
string[] Dirs = Directory.GetDirectories(Root);
string NewFolder = Path.Combine(Root, "NewFolder");
Directory.CreateDirectory(NewFolder);
这在最后一行给了我一个例外(但我可以在Dirs中列出子目录)
例外: System.UnauthorizedAccessException的
异常消息: 访问路径“/ storage / usbotg / NewFolder”被拒绝。
如果我使用:
string Root = "/storage/emulated/0";
一切正常,并且创建了“NewFolder”。
我缺少什么?如何写入该文件夹?
我正在使用Xamarin.Forms 2.5.0
感谢您的帮助
答案 0 :(得分:1)
使用文件系统访问应用程序的私有存储空间之外的数据受每个Android版本的限制。
推荐的选项是:
使用getExternalFilesDirs()
,getExternalCacheDirs
,...:这将为您提供一个或多个特定于您的应用程序的目录(通常是以程序包名称命名的目录)。这不适用于可移动媒体,除非它们被采用。
使用存储访问框架:请用户(使用ACTION_OPEN_DOCUMENT_TREE)选择存储根目录。然后,您可以通过SAF API管理所选目录的内容。您可以persist the permission,因此您只需要询问用户一次。似乎获得写入权限是what ES File explore does。
Mark Murphy(又多)detailed explanation。