我必须通过此代码对数据库进行备份,该代码必须有权访问文件系统。
我从此链接开始将引用添加到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'。
有什么我可以忽略的吗?
谢谢。
答案 0 :(得分:2)
在这种情况下,问题在于MySqlBackup.ImportFromFile
方法,实际上该方法在幕后使用System.IO
API,即使启用了broadFileSystemAccess
也无法访问任意路径。为了能够访问任何文件系统路径,您需要使用Windows.Storage
API(StorageFile
和StorageFolder
API)。
要使其正常工作,必须使用MySqlBackup
提供的其他方法-ImportFromMemoryStream
或ImportFromString
。例如:
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();
}
}
}