Я разрабатываю приложение, которое читает 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;
}
Используя универсальные приложения, я столкнулся с некоторыми проблемами:
-
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. Также возможно получить доступ к записи с помощью Token после перезагрузки программы.
Я также могу рекомендовать Руководства по UX и этот образец Github.
Большое спасибо!