我正在尝试在.Net桌面应用程序和Xamarin.Forms Android应用程序之间交换文件。我真的很难获得资源和帮助,所以我希望这个问题也包含一些内容 - 对于其他感兴趣的用户(不仅仅是Xamarin Forms)
到目前为止,我已经阅读了.Net C#中的文件和文件夹 Christophe Geers' Blog和Fun with MTP因为写作不适用于我的所有设备Windows File Stuff by Flauschig
在墙上的Xamarin.Forms方面,我首先偶然发现了Xamarin doc和A lib to store from pcl code以及Plugin.Permissions。
通过以上所有这些来源,我能够在Android(三星A5,Android 6.0)上阅读和书写工作。 使用this description on filestructure我认为以下代码将始终获得有效路径:
public string GetExternalFolder()
{
GetPermission();
var externalFolder = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "Android", "data", "com.exampledom.appname", "files");
if (!Directory.Exists(externalFolder))
CreateFolderStructure();
return externalFolder;
}
GetPermission()取自Plugin.Permissions,如果没有给出权限,则会抛出异常。
CreateFolderStructure()正在使用pcl.storage - 看起来像这样。
private async void CreateFolderStructure()
{
try
{
IFolder rootFolder = await FileSystem.Current.GetFolderFromPathAsync(Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path));
var subpaths = new[] {"Android", "data", "com.exampledom.appname", "files"};
foreach (var dir in subpaths)
{
if (!string.IsNullOrEmpty(dir))
rootFolder = await rootFolder.CreateFolderAsync(dir, CreationCollisionOption.OpenIfExists);
}
Log("Folder structure created!");
}
catch (Exception e)
{
Log("Folder structure cannot be created!");
Console.WriteLine("Failed to log! " + e.Message);
}
}
好的,现在提问: 由此方法创建的文件夹仅在我测试的一个设备上创建(概念证明) - 所有其他设备(例如Samsung A3,Android 6.0)没有任何反应(无助开发人员的证明)。 reboot不是解决方案。 同样在设备上也可以使用 - 按预期请求权限。其他设备上没有权限请求。
为什么在安装期间未创建所需的文件夹?似乎所有其他应用都有这样的文件夹' Android / data / com.exampledom.appname / files'。
我错过了什么?导入/导出到android似乎太难了。
答案 0 :(得分:0)
@smack CreationCollisionOptions.OpenIfExists真的创建了一个文件夹吗?我不这么认为。是否没有CreateIfNotExists枚举?