Баги моего времени

Чтение файла в приложении UWP

Решил я сделать красиво и с нуля писать приложение на Universal Windows Platform (UWP) по всем канонам. Однако, в Microsoft каноны пока еще не такие строгие как у РПЦ, поэтому даже из официальной справки половина кода не работает. А это еще чатжпт не подключили.... о каких ревизиях вообще может идти речь. Ладно, я отвлекся.

Нужно открыть файл хотябы для чтения. В справке предлагается добавить следующий код в Package.appxmanifest

<?xml version="1.0" encoding="utf-8"?>
<Package
    ...
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="... rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess"/>
</Capabilities>
</Package>

Но он не работает, даже не распознается как безошибочный.

Long story short, чтобы не томить. Вот готовый апплет:

var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation =
    Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
picker.FileTypeFilter.Add(".txt");

Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null) {
  // Приложение теперь вроде как должно иметь доступ 
  // к файлу... но смотрите catch блок
  Log("Выбранный файл: " + file.Name);
} else {
  Log("Операция выбора файла оменена");
  return;
}

try {
  var storageFile = await StorageFile.GetFileFromPathAsync(file.Path);
  using (StreamReader reader = new StreamReader(bs)) {
    string line;
    while ((line = reader.ReadLine()) != null) {
      Log("Строка прочитана: " + line);
    }
  }
}
}
catch (UnauthorizedAccessException) {
  // Чертов UWP не заводится пока ему не дашь 
  // полный доступ к файловой системе.
  // Да так быть не должно, но имеем то что имеем
  await Windows.System.Launcher.LaunchUriAsync(
      new Uri("ms-settings:privacy-broadfilesystemaccess"));
}

UPDATE Оказалось, что проекты из песочницы (те которые не загружены из МС стора, а например собраны локально) вообще не могут получать доступ к файлам за пределами папки в которую контент нужно еще загрузить программным путем — VS во время сборки делает это криво. И если какой-то доступ приложение получило, то это скорее баг чем победа. О боже, королеву ты не сохранил, сохрани хотя бы меня!

Подписаться на блог
Отправить
Поделиться
 70   5 мес   uwp-access-to-filesystem