Приложение UWP поддерживает исключение неавторизованного доступа - PullRequest
0 голосов
/ 18 января 2019

Я делаю приложение 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
Сообщение= Доступ к пути "C: \ Users \ IT \ Desktop \ AttendanceApp \ AttendanceApp \ AttendanceApp \ bin \ x86 \ Debug \ AppX \ Test \ user.cfg 'запрещен. Source = System.Private.CoreLib StackTrace: at System.IO.FileStream.ValidateFileHandle (SafeFileHandle fileHandle)
в System.IO.FileStream.CreateFileOpenHandle (режим FileMode, общий доступ к FileShare, параметры FileOptions) в System.IO.FileStream..ctor (путь строки, режим FileMode, доступ к FileAccess, общий доступ к FileShare,Int32 bufferSize, FileOptions options) в SharpConfig.Configuration.SaveToFile (строковое имя файла, кодировка кодирования) в SharpConfig.Configuration.SaveToFile (строковое имя файла) в AttendanceApp.MainPage.SaveButton_Click (отправитель объекта, RoutedEventArgs e) в C: \ Users \ IT \ DesktopAttendanceApp \ MainPage.xaml.cs: строка 57

Кстати, я также использую SharpConfig для редактирования моих .cfg файлов

Есть идеи, почему это происходит?Любая помощь будет отличной

1 Ответ

0 голосов
/ 21 января 2019

Есть два места, о которых вам нужно знать:

  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 для доступа к файлам вне контейнера приложения. Это здорово, но вы пропустили важное приглашение 'Эта возможность работает для API в пространстве имен Windows.Storage .' . Я проверил исходный код SharpConfig, метод SaveToFile использует соответствующие API-интерфейсы FileStream для записи файла. Он не включен в пространство имен Windows.Storage. Таким образом, возможность 'broadFileSystemAccess' не работает для него.

Итак, если вам нужно использовать «SharpConfig» в вашем проекте, вам нужно использовать API «Windows.Storage Namespace» для изменения его исходного кода и компиляции пользовательской версии для вашего проекта UWP. А пока помните мое объяснение в первом абзаце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...