访问文件系统UWP

时间:2019-12-27 11:31:27

标签: c# uwp filesystems

我必须通过此代码对数据库进行备份,该代码必须有权访问文件系统。

我从此链接开始将引用添加到Package.appxmanifest,并且还激活了设置中的应用程序权限。

设置->隐私->文件系统,我已经激活了应用程序权限。这样,您应该可以通过路径访问文件,但仍然会崩溃。

MainPage.xaml.cs:

string constring = "server=localhost;user=user;pwd=password;database=dbtest;";
string file = "C:\\backup.sql";
using (MySqlConnection conn = new MySqlConnection(constring))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        using (MySqlBackup mb = new MySqlBackup(cmd))
        {
            cmd.Connection = conn;
            conn.Open();
            mb.ImportFromFile(file);
            conn.Close();
        }
    }
}

Package.appxmanifest:

  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">

  <Capabilities>
    <Capability Name="internetClient" />
    <rescap:Capability Name="broadFileSystemAccess" />
  </Capabilities>

错误是:

  

拒绝访问路径C:\ backup.sql'。

有什么我可以忽略的吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

在这种情况下,问题在于MySqlBackup.ImportFromFile方法,实际上该方法在幕后使用System.IO API,即使启用了broadFileSystemAccess也无法访问任意路径。为了能够访问任何文件系统路径,您需要使用Windows.Storage API(StorageFileStorageFolder API)。

要使其正常工作,必须使用MySqlBackup提供的其他方法-ImportFromMemoryStreamImportFromString。例如:

string constring = "server=localhost;user=user;pwd=password;database=dbtest;";
string file = "C:\\backup.sql";
var fileContent = await Windows.Storage.FileIO.ReadTextAsync(file);
using (MySqlConnection conn = new MySqlConnection(constring))
{
    using (MySqlCommand cmd = new MySqlCommand())
    {
        using (MySqlBackup mb = new MySqlBackup(cmd))
        {
            cmd.Connection = conn;
            conn.Open();
            mb.ImportFromString(fileContent);
            conn.Close();
        }
    }
}
相关问题