2015-10-12 2 views
15

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

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

public IList<string> 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<StorageFile> files = queryResult.GetFilesAsync().GetResults(); 

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

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

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

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

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

Я также могу рекомендовать вам UX Guidlines и этот Github sample.

спасибо!

+0

Почему вы хотите читать из каталогов вне хранилища вашего приложения? Песочница существует по какой-то причине. –

+0

Потому что я хочу простой способ изменить файлы. Значит, это означает, что нет никакой возможности из-за песочницы? – WhiteIntel

ответ

36

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

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

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

+0

Собирался опубликовать почти точно такой же ответ. Я также хотел бы добавить, что вы должны объявить в своем манифесте, что хотите получить доступ к Библиотеке изображений и съемному хранилищу. Таким образом, у вас есть доступ к большинству фотографий ... – Barptad

+0

Можно ли выбрать папку за один раз и сохранить возвращаемое значение в файле конфигурации для повторного использования пути? – WhiteIntel

+2

Я думаю, вы можете позволить пользователю выбрать папку один раз и поместить ее в FutureAccessList, чтобы вы всегда могли получить к ней доступ ... –

0

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

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

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

С уважением

0

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

Смежные вопросы