Специальная папка.Личная существующая база данных sqlite

#c# #android #sqlite #xamarin

#c# #Android #sqlite #xamarin

Вопрос:

В моем приложении Xamarin для Android я создаю путь к базе данных, используя «System.Environment.Специальная папка.Личная». У меня есть существующая база данных sqlite. Куда в проекте и с какими свойствами я должен включить базу данных, которая будет использоваться в папке personal?

Комментарии:

1. Вам нужно будет включить существующую базу данных в свой проект в качестве ресурса, а затем при запуске скопировать ее в личную папку.

2. Спасибо. Как я могу скопировать в личную папку при запуске. Извините, но я новичок в xamarin.

3. robgibbens.com/…

Ответ №1:

Вы можете использовать Xamarin.Essentials для доступа к вашему доступному только для чтения пакету / ресурсу asset и скопировать его без необходимости использовать собственный код платформы или если вы кодируете в 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);
    }
}