Xamarin Essentials 文件系统,能否异步保存?

5

我正在研究Xamarin Essentials,想知道FileSystem的目的是什么。

我在寻找一个可以异步加载和保存文件的工具。

根据我的理解,它只提供了一个保存和加载文件的位置,没有实际保存文件的功能,例如“Old PCLStorage”。

这个理解正确吗?

1个回答

6
所有 Xamarin Essentials 文件系统助手所做的就是提供对应用程序中两个不同目录——CacheDirectory 和 AppDataDirectory 的访问,以及对预置只读文件的访问,因此您无需编写基于平台的代码来访问这些位置,并且可以使用自己的 DI(或使用 Forms 的 DI)来访问它们...
一旦您获得了基于字符串的目录位置,那么您就可以使用普通的 .Net(Std) 文件和目录 I/O 程序。使用 .Net(Std) 框架或第三方框架/包中的异步(或非异步)函数创建/删除子目录,创建/读取/写入/删除文件。由您决定...

CacheDirectory

缓存目录是一个读/写位置,它实现对 "本机" 平台缓存位置的访问。在 Android 上,这是 Cache
var cacheDir = FileSystem.CacheDirectory;

AppDataDirectory

应用数据目录是存储常规文件的“默认”位置。

如文档所述:

任何非用户数据文件

顺便提一下:如果你正在实现/遵守平台相关的规范,这不是用于Sqlite数据库等的地方。为什么Essentials没有包含数据库位置是我不知道的,因为像iOS和Android这样的平台都有为它们编写API并正式记录位置的... ;-/

Application bundled files (read-only)

OpenAppPackageFileAsync提供访问(通过Stream)读取应用程序中捆绑的只读文件(AndroidAssets, BundleResource等)的方式。

using (var stream = await FileSystem.OpenAppPackageFileAsync("sushiLogo.png"))
{
    using (var reader = new StreamReader(stream))
    {
        var fileContents = await reader.ReadToEndAsync();
    }
}

哇,非常感谢您详细的回答,我对使用方法更加了解了。在我们的应用程序中,我们需要将一些文档文件存储到设备上,并且我们即将在iOS和Android上实现自己的saveasync(如果您喜欢)。我希望能够摆脱这种代码并使用Xamarin Essentials进行替换。但是从您所说的来看,仍然需要我们自己保存和加载文件。我注意到您提供了readasync但没有writeasync,这更符合我的兴趣。所以他们给我们的是我不需要在iOS和Android上编写代码,而是获取位置并保存。 - developer9969
这是我难以理解的部分。因此,在我的情况下,我应该写入缓存目录并使用文件系统从那里读取,如果我错了,请纠正我,这是唯一可以被Xamarin Essentials读取的文件写入方式。那么我还需要iOS和Android实现吗?谢谢您的时间。 - developer9969
@developer9969 文件可以被Xamarin Essentials正确读取。Essentials不会将任何内容读写到缓存/应用程序数据位置,它只返回一个包含路径的字符串。你需要根据该路径创建/打开一个文件。而且,你不需要为此编写任何平台相关的代码,只需使用普通的(跨平台).Net框架代码即可。 - SushiHangover
1
那么,在Xamarin.Forms中,我应该把SQLite数据库保存在哪里呢? - Ulysses Alves
嗨,我有同样的问题,使用xamarinforms时最好的保存sqlite数据库的位置在哪里? - KillemAll
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接