SpecialFolder. Личная база данных sqlite - PullRequest
0 голосов
/ 06 марта 2019

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

1 Ответ

0 голосов
/ 06 марта 2019

Вы можете использовать Xamarin.Essentials, чтобы получить доступ к вашему пакетному ресурсу / ресурсу только для чтения и скопировать его без необходимости использовать собственный код платформы или, если вы программируете в проекте Xamarin.Android, вы можете напрямую использовать Android.Content.Активы

Предположим, у вас есть база данных в папке «Ресурсы Android»:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...