Ошибка при попытке создать / восстановить резервную копию базы данных - PullRequest
0 голосов
/ 07 октября 2019

Я пытался добавить опцию резервного копирования / восстановления в свое приложение, поэтому я искал и нашел некоторую полезную информацию (которая, казалось, легко выполнялась).

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