首页 > 解决方案 > SpecialFolder.个人现有的sqlite数据库

问题描述

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

标签: c#androidsqlitexamarin

解决方案


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

因此,假设您的 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);
    }
}

推荐阅读