Операции файлового ввода-вывода не работают, когда объявлена ​​возможность broadFileSystemAccess - PullRequest
0 голосов
/ 29 октября 2018

Я столкнулся с некоторым странным поведением при использовании возможности "broadFileSystemAccess" во время разработки моего приложения, т.е.

Я использую вышеупомянутую возможность для доступа ко всей файловой системе и к минимальной и максимальной версиям моего приложения. Я сохранил ver 17134 (RS4) , и ниже API выдают исключения, запрещающие доступ, несмотря на объявление * Возможность 1005 *.

API перечислены ниже:

  • ZipFile.CreateFromDirectory - из System.IO пространство имен

    См. https://github.com/siddhu10/Zipping.git для примера примера, который не работает для вышеуказанного API.

  • DownloadFileAsync от FluentFTP - сторонняя библиотека от nuget

    См. https://github.com/siddhu10/FileTransfer.git для примера примера, который не работает для вышеуказанного API.

Imp Примечание: Наблюдение выше сбоя API, только если min ver также 17134 (RS4) и более поздние версии. Эти API работают, когда поддерживается минимальная версия 15063 и более низкие версии.

Пожалуйста, помогите решить вышеуказанные проблемы.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Способ работы .NET с путями посреднических файлов изменился в RS3 как часть работы .NET Standard. До RS3 типы System.IO пытались использовать API-интерфейсы WinRT под прикрытием для доступа к файлам брокера, что работало до тех пор, пока пользователь предоставил доступ к приложению.

Начиная с RS3, API-интерфейсы были изменены, чтобы просто использовать необработанные Win32 API-интерфейсы (как часть усилий по стандартизации). В настоящее время существуют Win32 API, которые могут получать доступ к брокерским расположениям, но из-за последовательности неудачных событий это не те API, которые использует .NET.

Пока ваш min-ver меньше RS3, вы получите старое поведение (но не полную поддержку .NET Standard 2.0).

На данный момент единственный способ получить доступ к брокерским адресам, если ваш min-ver - RS3 или выше, - через WinRT API или Win32 FromApp API. И поскольку broadFilesystemAccess в RS4, боюсь, вы не сможете использовать его с System.IO API.

Если вам нужно использовать .NET API, вам нужно установить minver на RS2 или ниже, а затем попросить пользователя выбрать папку с FolderPicker. Затем вы можете использовать FutureAccessList, чтобы обеспечить постоянный доступ к местоположению.

0 голосов
/ 29 октября 2018

Проблема в том, что возможность broadFileSystemAccess применяется только к новым Windows.Storage API в UWP. Классический API-интерфейс File IO, который вы используете, не имеет доступа.

Вы можете проверить это в документах . Это означает, что вам придется либо заменить код альтернативами, использующими новые API, либо скопировать файлы, которые нужно использовать, в место, доступное для классических API, таких как ApplicationData.Current.LocalFolder.

...