Windows 10 Universal App File / Directory Access

Я разрабатываю приложение, которое читает jpeg и pdf-файлы из настраиваемого местоположения в файловой системе. В настоящее время в WPF реализована работающая версия, и теперь я пытаюсь перейти к новым приложениям Windows Universal.

Следующий код отлично работает с WPF:

public IList GetFilesByNumber(string path, string number) { if (string.IsNullOrWhiteSpace(path)) throw new ArgumentNullException(nameof(path)); if (string.IsNullOrWhiteSpace(number)) throw new ArgumentNullException(nameof(number)); if (!Directory.Exists(path)) throw new DirectoryNotFoundException(path); var files = Directory.GetFiles(path, "*" + number + "*", SearchOption.AllDirectories); if (files == null || files.Length == 0) return null; return files; } 

Используя универсальные приложения, я столкнулся с некоторыми проблемами:

  • Directory.Exists недоступен
  • Как я могу читать из каталогов за пределами моего хранилища приложений?

Чтобы читать из другого каталога за пределами хранилища приложений, я попробовал следующее:

 StorageFolder folder = StorageFolder.GetFolderFromPathAsync("D:\\texts\\"); var fileTypeFilter = new string[] { ".pdf", ".jpg" }; QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderBySearchRank, fileTypeFilter); queryOptions.UserSearchFilter = "142"; StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions); IReadOnlyList files = queryResult.GetFilesAsync().GetResults(); 

Дело в том, что он не работает, но я получаю исключение:

Исключение типа «System.UnauthorizedAccessException» произошло в TextManager.Universal.DataAccess.dll, но не было обработано в коде пользователя. Дополнительная информация: Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

Я знаю, что вам нужно настроить некоторые разрешения в манифесте, но я не могу найти подходящий для операций ввода-вывода файловой системы …

У кого-то были такие проблемы / возможное решение?

Решение. Из решений, которые дал мне @Rico Suter, я включил FutureAccessList в сочетании с FolderPicker. Также возможен доступ к записи с токеном после перезапуска программы.

Я также могу рекомендовать вам рекомендации по UX и этот образец Github .

Большое спасибо!

В приложениях UWP вы можете получить доступ только к следующим файлам и папкам:

  • Каталоги, объявленные в файле манифеста (например, папка «Документы», «Картинки», «Видео»)
  • Каталоги и файлы, которые пользователь вручную выбрал с помощью FileOpenPicker или FolderPicker
  • Файлы из списка FutureAccessList или MostRecentlyUsedList
  • Файлы, которые открываются ассоциацией расширения файлов или через общий доступ

Если вам нужен доступ ко всем файлам в D:\ , пользователь должен вручную выбрать диск D:\ с помощью FolderPicker, тогда у вас будет доступ ко всему этому диску …

Принятый ответ больше не завершен. Теперь можно объявить broadFileSystemAccess в манифесте приложения для произвольного чтения файловой системы.

На странице Разрешения доступа к файлам есть сведения.

Обратите внимание, что пользователь все равно может отменить это разрешение с помощью приложения настроек.

Согласно документу MSDN: «Сборщик файлов позволяет приложению получать доступ к файлам и папкам, прикреплять файлы и папки, открывать файл и сохранять файл».

https://msdn.microsoft.com/en-us/library/windows/apps/hh465182.aspx

Вы можете прочитать файл, используя filepicker, через стандартный пользовательский интерфейс.

С уважением

это неверно: файлы, которые открываются ассоциацией расширений файлов или через совместное использование, открывают файлы из почты (Outlook) или с рабочего стола … это просто не работает, вам сначала нужно предоставить права по файлу подборщика. поэтому это ist sh …

  • Почему обновление привязки не реализует INotifyPropertyChanged?
  • Является ли реализация Джошем Смитом RelayCommand ошибочной?
  • Как перебрать строки инструментария WPF Datagrid
  • как захватить символ «#» на разных языковых клавиатурах в WPF / C #?
  • Файл метаданных '.dll' не найден.
  • MVVM: Учебник от начала до конца?
  • Выбор элемента текстового поля в списке не изменяет выбранный элемент списка
  • Нажатие свойств GUI только для чтения обратно в ViewModel
  • Мои изображения размыты! Почему WPF SnapsToDevicePixels не работает?
  • Будет ли Windows Forms устаревшим в пользу WPF?
  • Получить элемент doubleclick event listview
  • Давайте будем гением компьютера.