Я пытался добавить опцию резервного копирования / восстановления в свое приложение, поэтому я искал и нашел некоторую полезную информацию (которая, казалось, легко выполнялась).
Один из них относится к File
из Xamarin.Essentials
, который я пытался использовать, но продолжает выдавать ошибку «Отказано в доступе».
Получение каталога db:
public Restaurar()
{
InitializeComponent();
localPath = Path.Combine(FileSystem.AppDataDirectory, templateFileName);
}
Исходный файл и имена резервных копий, а также localpath
:
const string templateFileName = "database.sqlite";
const string localFileName = "backup_database.sqlite";
string localPath;
Функция создания резервной копии:
private void BtnBackup_Clicked(object sender, EventArgs e)
{
var reading = File.ReadAllText(localPath);
File.WriteAllText(localFileName, reading);
DisplayAlert("BACKUP", "Backup file created!", "OK");
}
Перемещение файла резервной копиив отдельную папку базы данных:
private void BtnMove_Clicked(object sender, EventArgs e)
{
File.Move(localFileName, FileSystem.AppDataDirectory);
}
При нажатии кнопки «Резервное копирование» я получил следующее исключение:
System.UnauthorizedAccessException: 'Access to the path "/backup_database.sqlite" is denied.'
И при нажатии кнопки «Переместить»:
System.IO.FileNotFoundException: 'Could not find file'/backup_database.sqlite'.'
Я думал, что это создаст новый файл в папке проекта, который я смогу переместить папку базы данных Android / IOS. Я благодарен за любую помощь, заранее спасибо!
РЕДАКТИРОВАТЬ:
Я попробовал другой подход:
У меня уже есть DependecyService для получения платформыконкретный путь к базе данных, поэтому я использовал его.
Резервное копирование:
private void BtnBackup_Clicked(object sender, EventArgs e)
{
var dep = DependencyService.Get<IPath>();
string db_path = dep.GetPath("database.sqlite");
string backup_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
var origin = File.ReadAllBytes(db_path);
File.WriteAllBytes(backup_path, origin);
DisplayAlert("BACKUP", "Backup created!", "OK");
}
Восстановление :
private void BtnRestaurar_Clicked(object sender, EventArgs e)
{
var dep = DependencyService.Get<IPath>();
string db_path = dep.GetPath("database.sqlite");
string backup_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
var origin = File.ReadAllBytes(backup_path);
File.WriteAllBytes(db_path, origin);
DisplayAlert("RESTAURING", "Backup restored!", "OK");
}
Я получаю следующее исключение:
System.UnauthorizedAccessException: 'Access to the path '/data/user/0/com.companyname.VendasEstoque/files/.local/share' is denied.'