xamarin.forms 中的用户可访问 folder/file

User accessible folder/file in xamarin.forms

我已使用 System.Environment.SpecialFolder.Personal 创建文件并读取/写入该文件。

参考: Working with files

我可以从我的应用程序中的文件中读取它。但是我无法从我的 android 设备找到或浏览到该文件。

我想在其中创建一个用户可以访问的文件夹和文件。应允许用户浏览到该文件。我怎样才能在 xamarin.forms 中实现这个目标?

要上传 android 的外部存储中的文件:

var documentsPath = Android.OS.Environment.ExternalStorageDirectory.ToString();
var filePath = Path.Combine(documentsPath, "test.txt");
System.IO.File.WriteAllText (filePath, "Om Sai Ram");

添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建新文件夹:

var dir =  new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Sample/");
    if (!dir.Exists ())
        dir.Mkdirs ();
    if(dir.Exists())
        dir.Delete();

我一直在研究这个问题,我不确定它是否可以在表单中完成,除非你也有一些特定于平台的代码。您之前的回答只是关于 Android(即使您明确询问了表格)。这是我到目前为止发现的...

有一个 PCLStorage NuGet 包,它允许您在 PCL 中执行文件操作。这个我已经成功使用了...

问题是用户无法访问这些文件。根据 doco,我最初尝试 "IFolder RootFolder=FileSystem.Current.LocalStorage;"。我已经读过,如果您使用外部存储(实际上不一定是外部存储,而是 "external" 到您的主文件夹),那么它是用户可访问的,并且通过 intellisense 我发现有一个 RoamingStorage 选项。我试过了,它在 UWP 中工作,但在 Android 上出现了一个未处理的异常,所以我不确定如何解决这种情况(除了深入研究特定于平台的代码,使用 PCL存储在第一位)。

我也一直在寻找 Dropbox 来解决这个问题,但我仍然不确定如何实施它。我还没有找到关于这个主题的任何像样的教程,并且试图从片段中找出要做什么是很困难的。

我现在确实有一个解决方案(有点)。我还没有设法让 Dropbox 工作(Xamarin 正在开发一个新的 Dropbox nuget 包),但我能够通过使用 Xamarin.Plugin.Filepicker nuget 包加载外部文件(确保你使用那个特定的包,因为其他一些效果不佳,而这个开始时效果不佳!)。我在 Android 和 UWP 上都得到了这个解决方案(我发现这个解决方案是因为 MicroSoft 现在建议使用文件选择器来访问外部文件)。我还没试过iOS。

注意:您将无法写入该文件,但您可以从用户编辑它的任何地方导入它进行处理。另请注意,tostring() 不起作用 - 它仅 returns ASCII 代码,因此您必须明确地将结果转换为 char。数据以数组而不是流的形式返回。

我相信也可以写入文件,但是您必须自己全部写入 - 当前没有可用的包可以做到这一点。请参阅 https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/dependency-service/ 以帮助您入门。