C# xamarin.forms中用户可访问的文件夹/文件

C# xamarin.forms中用户可访问的文件夹/文件,c#,xamarin.forms,C#,Xamarin.forms,我使用System.Environment.SpecialFolder.Personal创建了一个文件,并对该文件进行了读/写操作 参考: 它的工作原理是我可以从我的应用程序中读取文件。但我无法从android设备中找到或浏览到该文件 我想在其中创建一个文件夹和文件,用户应该可以访问它。应允许用户浏览到该文件。如何在xamarin.forms中实现此目的?要将文件上载到android的外部存储中: var documentsPath = Android.OS.Environment.Extern

我使用System.Environment.SpecialFolder.Personal创建了一个文件,并对该文件进行了读/写操作

参考:

它的工作原理是我可以从我的应用程序中读取文件。但我无法从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" />

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

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

问题是用户无法访问这些文件。根据doco,我最初尝试了“IFolder RootFolder=FileSystem.Current.LocalStorage;”。我读过,如果你使用外部存储(实际上不一定是外部的,但在你的主文件夹中是“外部的”),那么它是用户可以访问的,通过intellisense我发现有一个漫游存储选项。我尝试过这个,它在UWP中工作,但在Android上出现了一个未处理的异常,所以我不确定如何解决这种情况(除了跳入特定于平台的代码,这在一开始就有点挫败了使用PCLStorage)


我也一直在研究Dropbox来促进这个问题,但是我仍然不确定如何实现它。我还没有找到任何关于这个主题的像样的教程,试图从片段中找出解决方法是很困难的。

我现在确实有了一个解决方案(某种程度上)。我还没有设法让Dropbox工作(Xamarin正在开发一个新的Dropbox nuget包),但是我能够通过使用Xamarin.Plugin.Filepicker nuget包加载外部文件(请确保您使用特定的一个,因为其他两个都不起作用,而这一个从一开始就没有那么好用!)。我在Android和UWP上都找到了这个解决方案(我发现了这个解决方案,因为微软现在建议使用文件选择器来访问外部文件)。我还没试过iOS

注意:您将无法写入该文件,但您可以从用户编辑该文件的位置导入该文件进行处理。还要注意,tostring()不起作用-它只返回ASCII码,因此必须显式地将结果转换为char。数据以数组而不是流的形式返回


我相信也可以写入文件,但是您必须自己编写—目前没有可用的软件包可以这样做。请参阅以开始使用。

我调试了代码,请检查路径n,上面写着
/data/user/0/appName/files
。当我尝试浏览此位置时,我找不到任何此类位置。感谢您的快速响应。这对我帮助很大。我还可以使用此方法创建文件夹吗?@Arti再次更新。检查一下。如果您得到了问题的完整答案,则标记为接受答案。:-)你能给我一个参考链接,在那里我可以找到所有这些概念吗?学习Xamarin Android原生开发。
var dir =  new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Sample/");
    if (!dir.Exists ())
        dir.Mkdirs ();
    if(dir.Exists())
        dir.Delete();