Выбор папки Несанкционированный доступ к подкаталогам и файлам в них UWP - PullRequest
0 голосов
/ 11 февраля 2020

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

Ниже описано, как я использую FolderPicker для выбора одной папки.

FolderPicker openPicker = new FolderPicker()
{
    ViewMode = PickerViewMode.Thumbnail,
    SuggestedStartLocation = PickerLocationId.ComputerFolder
};
openPicker.FileTypeFilter.Add("*");

var SelectedFolder = await openPicker.PickSingleFolderAsync();

Проблема, с которой я сталкиваюсь, заключается в том, что я выбрал папку, используя FolderPicker, когда Я выбираю один файл как StorageFile или подкаталог, используя GetFolderFromPath(), он выбрасывает UnAuthorizedAccessException

System.UnauthorizedAccessException: «Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) '

Ниже показано, как я могу получить доступ к ним обоим:

StorageFolder accessFolder = StorageFolder.GetFolderFromPathAsync(SelectedFolder.Path + "\\subDir1\\subDir2").AsTask().GetAwaiter().GetResult(); // throws the exception

StorageFile file = accessFolder.GetFileAsync("DummyMediaFile.mp4").AsTask().GetAwaiter().GetResult(); // also throws the exception

1 Ответ

1 голос
/ 11 февраля 2020

Есть два способа достичь вашей цели:

1. Используйте возможность broadFileSystemAccess.

Пожалуйста, обратитесь к концу этого документа , чтобы добавить возможность broadFileSystemAccess в файл package.appxmanifest.

Выглядит так:

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp uap5 rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

Затем найдите ваше приложение в Settings -> Application, нажмите и выберите Advanced Settings, откройте File system.

После этого ваш код может выполняться гладко.

2. Не используйте пути для доступа к папкам

Хотя путь является относительно простым способом, в UWP не разрешен прямой доступ к файлам или папкам по пути. Вам необходимо использовать следующий метод:

StorageFolder accessFolder = await (await SelectedFolder.GetFolderAsync("subDir1")).GetFolderAsync("subDir2");
StorageFile file = await accessFolder.GetFileAsync("DummyMediaFile.mp4");

Обратите внимание, пожалуйста, используйте этот метод, чтобы подтвердить правильность указанного выше имени файла или папки, в противном случае, пожалуйста, используйте CreateFolderAsync("name", CreationCollisionOption.OpenIfExists)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...