0

我一直在尝试向我的应用程序添加备份/恢复选项,因此我搜索并找到了一些有用的信息(这似乎很容易做到)。

其中一个是关于Filefrom 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.'
4

0 回答 0