#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 это проблема.
Вот подход (я даже не буду называть его решением), который работает только для очень узкого набора сценариев: Если…
- вы знаете, что все файлы находятся под определенной папкой и
- это нормально, если у вас есть хотя бы какой-то (минимальный) пользовательский интерфейс
затем вы можете выполнить следующие действия:
- Разместите AppService в приложении UWP (см. https://learn.microsoft.com/en-us/windows/uwp/launch-resume/convert-app-service-in-process )
- Попросите пользователя один раз указать папку при первом запуске приложения (с помощью FolderPicker).
- Сохраните эту папку в списке FutureAccessList (см. https://learn.microsoft.com/en-us/uwp/api/Windows .Хранение.Кэш доступа.StorageApplicationPermissions#Windows_Storage_AccessCache_StorageApplicationPermissions_FutureAccessList ) под определенным именем
- При следующем запуске приложения, в котором размещен AppService, вы можете получить папку из списка FutureAccessList
Конечно, на практике вы будете обращаться к FutureAccessList каждый раз при запуске приложения, и если оно не содержит папки, то спросите пользователя.