我正在制作UWP应用,但我一直拥有System.UnauthorizedAccessException
这是我主文件的完整代码
private void SaveButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
var user = new Configuration();
string Email = txtEmail.Text.Trim();
user[Email]["Value"].StringValue = "test";
string dest = Path.GetFullPath(@"C:\Users\IT\Desktop\AttendanceApp\AttendanceApp\bin\x86\Debug\AppX\Test\user.cfg");
user.SaveToFile(dest);
}
在我阅读UWP应用程序文件访问权限的文档时,它建议添加此行
xmlns:rescap =“ http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities” IgnorableNamespaces =“ uap mp uap5 rescap”> ...
这是我的AppxManifest文件
<Package xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp uap5 rescap" xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5">
---
<Capabilities>
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>
因此,当我尝试保存文件时。我仍然继续遇到此错误。
System.UnauthorizedAccessException HResult = 0x80070005
Message =访问路径 'C:\ Users \ IT \ Desktop \ AttendanceApp \ AttendanceApp \ bin \ x86 \ Debug \ AppX \ Test \ user.cfg' 被拒绝。来源= System.Private.CoreLib StackTrace:at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)
在System.IO.FileStream.CreateFileOpenHandle(FileMode模式,FileShare 共享,位于System.IO.FileStream..ctor(String 路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions选项)位于 SharpConfig.Configuration.SaveToFile(字符串文件名,编码 编码)在SharpConfig.Configuration.SaveToFile(字符串文件名) 在AttendanceApp.MainPage.SaveButton_Click(对象发送者, RoutedEventArgs e)在 C:\ Users \ IT \ Desktop \ AttendanceApp \ AttendanceApp \ MainPage.xaml.cs:line 57
通过这种方式,我还使用SharpConfig
编辑我的.cfg
文件
为什么会发生这种情况?任何帮助都很好
答案 0 :(得分:2)
您需要注意两个地方:
C:\Users\IT\Desktop\AttendanceApp\AttendanceApp\bin\x86\Debug\AppX\
中的路径等于Windows.ApplicationModel.Package.Current.InstalledLocation.Path
。在UWP中,已安装的语言环境文件夹是只读的。您不能使用任何API编写代码。您可以考虑将“ user.cfg”处理到其他位置,然后可以写它。 ApplicationData文件夹将是一个不错的选择。例如,LocalFolder。broadFileSystemAccess
功能来访问应用程序容器之外的文件。很好,但是您错过了important prompt “此功能适用于Windows.Storage命名空间中的API。” 。我已经检查了SharpConfig的源代码,SaveToFile方法使用与'FileStream'相关的API来写入文件。它不包含在“ Windows.Storage命名空间”中。因此,“ broadFileSystemAccess”功能不适用于此功能。因此,如果必须在项目中使用“ SharpConfig”,则需要使用“ Windows.Storage命名空间” API更改其源代码并为UWP项目编译自定义版本。同时,请记住我在第一段中的解释。