无法使用 PCLStorage 或 Xamarin Forms Labs 在 Android 文件系统中创建文件夹/文件
Posted
技术标签:
【中文标题】无法使用 PCLStorage 或 Xamarin Forms Labs 在 Android 文件系统中创建文件夹/文件【英文标题】:Not able to create a folder/file in Android file system with PCLStorage or Xamarin Forms Labs 【发布时间】:2015-05-20 23:12:21 【问题描述】:我正在使用 Xamarin 平台开发一个 android 应用程序,并且我试图在我的本地存储上创建一个文件夹,但我没有成功。
首先,我尝试通过 Xamarin Forms Labs 创建的 FileManager 类使用 System.IO 命名空间。我传递“/storage/emulated/0/`”路径的函数的 sn-p。
public void CreateDirectory(string path)
this.isolatedStorageFile.CreateDirectory(path);
public Stream OpenFile(string path, FileMode mode, FileAccess access)
return (Stream)this.isolatedStorageFile.OpenFile(path, (System.IO.FileMode)mode, (System.IO.FileAccess)access);
这不起作用,因此我选择使用 PCLStorage 库进行跨平台文件操作。我试过这段代码。
IFolder rootFolder = FileSystem.Current.LocalStorage;
folder = await rootFolder.CreateFolderAsync("wakesocial",
CreationCollisionOption.OpenIfExists);
没用。我导航到内部存储的根目录,但没有看到该文件夹。
所以错误似乎并没有因为正在使用的库而发生,而是特定于 Android 的。我已经在清单中读取和写入外部存储。所以问题是。应用程序是否有权在存储设备的根级别创建文件或文件夹,或者是否必须在特定位置(例如 Android/data/packagename)创建文件或文件夹
【问题讨论】:
如果您在清单中设置了读/写权限,那么您应该没有任何理由不能在根 sdcard 路径中创建目录或文件。您提供给CreateDirectory()
的路径是什么? EG:您使用的是 System.Environment.SpecialFolder 文件夹类型之一吗?
还有,isolatedStorageFile
是什么数据类型?
@MattR System.IO.IsolatedStorage
啊,是的,我错过了您问题的 PCL 部分。 System.Environment.SpecialFolder
在 PCL 中不可用。
好的,我删除了它,因为我知道它不可用。我将它设置在一个 android 应用程序的变量中,然后使用该路径,看看它是否有效。
【参考方案1】:
string folderPath = Environment.ExternalStorageDirectory.AbsolutePath; //Android
public async Task PCLGenaratePdf(string folderPath )
IFolder rootFolder = await FileSystem.Current.GetFolderFromPathAsync(folderPath );
IFolder folder = await rootFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists);
IFile file = await folder.CreateFileAsync("file.pdf", CreationCollisionOption.ReplaceExisting);
【讨论】:
谢谢你的回复 Iceburg,我再试一次,让你知道。如果它正在工作,它不会被选为答案? 在我的 happy.xaml.cs 中添加 IFolder 需要什么命名空间? @AshishJain 添加 PCL 存储 nuget 包 你能告诉我那个金块包的确切名称吗?会很有帮助的。 它正在工作,我在某些时候犯了一个错误,现在它正在工作,还有一件事我需要问你正在经过的路径是什么?是文件夹路径吗?如果是,那么您如何获取文件夹路径?此行不适用于我获取路径字符串 path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);【参考方案2】:经过大量尝试,我用这个解决了这个问题
string rootPath = Android.App.Application.Context.GetExternalFilesDir(null).ToString();
var filePathDir = Path.Combine(rootPath, "Folder");
if (!File.Exists(filePathDir))
Directory.CreateDirectory(filePathDir);
创建的文件夹可通过 adb @ /sdcard/Android/Data/Folder 或类似的东西访问,或者在设备内存中访问 @ /Android/data/>/files/Folder
【讨论】:
【参考方案3】:在 Android 上,PCL 存储的 LocalStorage 文件夹 corresponds to the "My Documents" Special Folder。
我不确定您要在哪个路径中创建文件夹,但如果您知道路径并想使用 PCL 存储,您应该可以使用FileSystem.Current.GetFolderFromPathAsync
获取 PCL 存储 @987654323 @ 对应于现有文件夹。
【讨论】:
以上是关于无法使用 PCLStorage 或 Xamarin Forms Labs 在 Android 文件系统中创建文件夹/文件的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Pcl Storage 在 Xamarin 表单中读取文件
Xamarin,如何使用 WebView 浏览 lokala 文件,(不是预装文件)
无法在 Xamarin iOS 应用程序中将文本共享到电子邮件或短信中
发生一个或多个错误。 (无法解析 TLS 数据包头)C# Xamarin Android Project Visual Studio