Доступ к файлам дисков C в UWP AppService

#uwp

#uwp

Вопрос:

Как получить доступ к файлам системного диска (диска C, D) в UWP AppService. Пример: я хочу получить доступ к «C:Testsample.txt » файл из UWP AppServices.

Я попробовал приведенный ниже код. но выдает ошибку (дополнительная информация: доступ запрещен.). А также добавлены возможности «Съемного хранилища» в файле appxmanifest.

 StorageFolder testfolder = await StorageFolder.GetFolderFromPathAsync(@"c:\test");
StorageFile sourcefile = await testfolder.GetFileAsync("sample.txt");
StorageFile destinationfile = await KnownFolders.SavedPictures.CreateFileAsync("Mysample.txt");
using (var sourcestream = (await sourcefile.OpenReadAsync()).GetInputStreamAt(0))
{
    using (var destinationstream = (await destinationfile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
    {
        await RandomAccessStream.CopyAndCloseAsync(sourcestream, destinationstream);
    }
}
  

Ответ №1:

Я ценю, что уже поздно, но для всех, кто сейчас ссылается на этот пост, похоже, что Microsoft теперь добавила эту возможность.

Просто добавьте возможность «broadFileSystemAccess» в манифест приложения, как описано здесь: https://learn.microsoft.com/en-us/windows/uwp/files/file-access-permissions

Обратите внимание, что для этого все еще требуется пользовательский ввод в некоторой степени (пользователь должен предоставить разрешение на доступ к файловой системе при первом запуске приложения), но пользовательский интерфейс выбора файлов / папок не требуется.

На самом деле я еще не пробовал это, но это звучит так, как вам нужно.

Комментарии:

1. Я добавил это, но где происходит предоставление разрешения?

Ответ №2:

Без взаимодействия с пользователем вы можете открывать только определенные местоположения (см. https://learn.microsoft.com/en-us/windows/uwp/files/file-access-permissions ). Как упоминалось @TheTanic, вы можете получить доступ к другим местоположениям только при взаимодействии с пользователем (FileOpenPicker / FolderPicker). Конечно, для «чистого» UWP AppService это проблема.

Вот подход (я даже не буду называть его решением), который работает только для очень узкого набора сценариев: Если…

  • вы знаете, что все файлы находятся под определенной папкой и
  • это нормально, если у вас есть хотя бы какой-то (минимальный) пользовательский интерфейс

затем вы можете выполнить следующие действия:

Конечно, на практике вы будете обращаться к FutureAccessList каждый раз при запуске приложения, и если оно не содержит папки, то спросите пользователя.