Как получить доступ к базе данных SQLite из хранилища песочницы приложения Android? - PullRequest
1 голос
/ 03 октября 2019

У меня есть собственное приложение, которое генерирует файл базы данных SQLite в com.companyname.appname / database / MyDatabase.db. Это находится во внутреннем хранилище приложений Android.

Мне нужно перенести это приложение в Xamarin.Forms, но мне нужно получить доступ к этой базе данных, чтобы переместить ее в другой каталог или прочитать базу данных напрямую.

Проблема в том, что использование System.Environment.SpecialFolder.Personal / System.Environment.SpecialFolder.MyDocuments, которое является максимально возможным местоположением, как указано в документации здесь , приводит только к com.companyname.appname / files / location,Мне нужно подняться на уровень выше, чтобы получить доступ к папке базы данных. Возможно ли это?

Примечание. Я попытался жестко запрограммировать путь, а также добавить «../», который не работает и выдает ошибку.

1 Ответ

0 голосов
/ 04 октября 2019

Проблема заключается в том, что использование System.Environment.SpecialFolder.Personal / System.Environment.SpecialFolder.MyDocuments, которое является максимально возможным местоположением, как указано в документации, приводит только к com.companyname.appname / files/ location.

Personal directory, который служит общим хранилищем для документов, эквивалентен MyDocuments. Для получения дополнительной информации вы можете проверить документы MS. https://docs.microsoft.com/en-us/dotnet/api/system.environment.specialfolder?view=netframework-4.8

Простой способ считывания базы данных из личной папки.

string databaseFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                string databasePath = Path.Combine(docFolder, "TodoSQLite2.db3");

Скопировать покинутую базу данных в папку Assets .

enter image description here

И установите для Действие построения значение AndroidAsset .

enter image description here

Обновлено:

Если вы хотите скопировать базу данных в другую папку во время выполнения, вы можете попробовать код ниже. Я использую локальную папку, например.

// Check if it exists at that path
if (File.Exists(filePath))
{
   // Copy the file to the app's local folder, you could change the path where you want to copy.
   string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
   string destinationPath = Path.Combine(folderPath, "myData.db");
   File.Copy(filePath, destinationPath);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...