Доступ к файлам и каталогам универсального приложения Windows 10
Я разрабатываю приложение, которое читает файлы jpeg и pdf из настраиваемого местоположения в файловой системе. В настоящее время в WPF реализована работающая версия, и теперь я пытаюсь перейти на новые приложения Windows Universal.
Следующий код прекрасно работает с 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;
}
С использованием Universal Apps я столкнулся с некоторыми проблемами:
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 Suter, я выбрал FutureAccessList в сочетании с FolderPicker. Также возможно получить доступ к записи с токеном после перезапуска программы.
Я также могу порекомендовать вамUX Guidlines и этоGithub образец.
Большое спасибо!