SpecialFolder.个人现有的sqlite数据库

Posted

技术标签:

【中文标题】SpecialFolder.个人现有的sqlite数据库【英文标题】:SpecialFolder.Personal existing sqlite database 【发布时间】:2019-07-28 15:15:24 【问题描述】:

在我的 Xamarin android 应用程序上,我使用“System.Environment.SpecialFolder.Personal”创建数据库路径。 我有一个现有的 sqlite 数据库。我必须在项目的哪个位置以及哪些属性包含要在个人文件夹中使用的数据库?

【问题讨论】:

您需要将现有数据库作为资产包含在项目中,然后在启动时将其复制到个人文件夹。 谢谢。如何在启动时复制到个人文件夹。抱歉,我是 xamarin 的新手。 robgibbens.com/… 【参考方案1】:

您可以使用Xamarin.Essentials 访问您的只读包/资产资源并复制它,而无需使用本机平台代码,或者如果您在 Xamarin.Android 项目中进行编码,您可以直接使用Android.Content's资产

所以假设你的 Android Assets 文件夹中有一个数据库:

Assets
   db.sqlite

Xamarin Essentials / NetStd2.0 代码示例:

var copyToLocationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "db.sqlite");
if (!File.Exists(copyToLocationPath))

    using (var assetStream = await Xamarin.Essentials.FileSystem.OpenAppPackageFileAsync("db.sqlite"))
    using (var fileStream = new FileStream(copyToLocationPath, FileMode.Create, FileAccess.Write))
    
        await assetStream.CopyToAsync(fileStream);
    

var connection = new SqliteConnection(copyToLocationPath);

Xamarin Android 代码示例(直接使用Assets):

var copyToLocationPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "db.sqlite");
if (!File.Exists(copyToLocationPath))

    using (var assetStream = Assets.Open("db.sqlite"))
    using (var fileStream = new FileStream(copyToLocationPath, FileMode.Create, FileAccess.Write))
    
         await assetStream.CopyToAsync(fileStream);
    

【讨论】:

以上是关于SpecialFolder.个人现有的sqlite数据库的主要内容,如果未能解决你的问题,请参考以下文章