表单Android无法访问USB OTG文件夹

表单Android无法访问USB OTG文件夹,android,xamarin.forms,storage,unauthorized,usb-otg,Android,Xamarin.forms,Storage,Unauthorized,Usb Otg,我在安卓5.0设备上,usb大容量存储器通过usb OTG电缆安装在/storage/usbotg上。 不幸的是,从我的应用程序中,我只能读取该文件夹。请注意,我设置了写入外部存储权限,因为我可以写入设备存储 我发布以下代码作为参考: string Root = "/storage/usbotg"; string[] Dirs = Directory.GetDirectories(Root); string NewFolder = Path.Co

我在安卓5.0设备上,usb大容量存储器通过usb OTG电缆安装在/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"; 
一切正常,新文件夹已创建

我错过了什么?我怎样才能写入那个文件夹

我用的是Xamarin,Forms 2.5.0


感谢您的帮助

使用文件系统访问应用程序私有存储之外的数据在每个Android版本中都受到了更严格的限制

建议的方案有:

使用GetExternalFileDirs、getExternalCacheDirs,…:这将为您提供一个或多个特定于应用程序的目录,通常是以包名命名的目录。这不适用于可移动媒体,除非它们被采用

使用存储访问框架:请使用的用户选择存储根目录。然后,您可以通过SAF API管理所选目录的内容。可以,因此只需询问用户一次。似乎是为了获得书面许可


Mark Murphy提供的更多信息。

您使用了哪种文件浏览器应用程序?请使用try catch获取信息。ES文件浏览器是我正在使用的文件浏览器,我想其他浏览器也可以使用。系统异常。UnauthorizedAccessException异常消息是拒绝访问路径/存储/usbotg/NewFolder。Micro SD卡和usb驱动器对于Android>4是只读的。只有一个特定于应用程序的目录是可写的。看看getExternalFilesDirs。看来ES文件资源管理器知道一些技巧,所以它可以写。如果要写入整个sd卡/存储器,请使用存储访问框架。并尝试其他文件浏览器应用程序。而且你没有提到你是否可以在micro sd卡上写字。感谢你的帮助greenapps,当使用插入USB OTG的getExternalFilesDir时,它在设备存储上只返回一个路径:/storage/emulated/0/Android/data/com.my.app/files,同时getExternalFilesDirs文档说明返回的路径不包括瞬态设备,例如连接到手持设备的USB闪存驱动器。感谢bwt,这澄清了很多事情!