UWP App不断抛出未经授权的访问异常

时间:2019-01-18 12:21:08

标签: c# windows xaml uwp storage

我正在制作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文件

为什么会发生这种情况?任何帮助都很好

1 个答案:

答案 0 :(得分:2)

您需要注意两个地方:

  1. 正如@ mm8所说,您上面的代码C:\Users\IT\Desktop\AttendanceApp\AttendanceApp\bin\x86\Debug\AppX\中的路径等于Windows.ApplicationModel.Package.Current.InstalledLocation.Path。在UWP中,已安装的语言环境文件夹是只读的。您不能使用任何API编写代码。您可以考虑将“ user.cfg”处理到其他位置,然后可以写它。 ApplicationData文件夹将是一个不错的选择。例如,LocalFolder
  2. 我看到您添加了broadFileSystemAccess功能来访问应用程序容器之外的文件。很好,但是您错过了important prompt “此功能适用于Windows.Storage命名空间中的API。” 。我已经检查了SharpConfig的源代码,SaveToFile方法使用与'FileStream'相关的API来写入文件。它不包含在“ Windows.Storage命名空间”中。因此,“ broadFileSystemAccess”功能不适用于此功能。

因此,如果必须在项目中使用“ SharpConfig”,则需要使用“ Windows.Storage命名空间” API更改其源代码并为UWP项目编译自定义版本。同时,请记住我在第一段中的解释。