Вы должны непосредственно прочитать байты из StorageFile, возвращенного из FilePicker, чтобы в будущем не возникли ошибки разрешения доступа к файлу.
StorageFile file = await fileOpenPicker.PickSingleFileAsync();
var buffer = await FileIO.ReadBufferAsync(file);
byte[] bytes = System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.ToArray(buffer);
Вы также должны использовать await FileIO.WriteBytesAsync(targetFile, myBytes)
для записи.
Если у вас нет broadFileSystemAccess
в вашем пакете Manifest, вы, как правило, должны избегать использования System.IO
API, если только вы не знаете, что ваше приложение явно имеет разрешение на доступ к файлам в этой области (т. Е. В локальном хранилище вашего приложения), и вместо этогоиспользуйте Windows.Storage
API
Проверьте MSDN для Разрешения доступа к файлу для приложений UWP для получения дополнительной информации о разрешениях файла.
И если вы используете System.IO
, всегда выполняйтеработа в фоновом потоке через await Task.Run(() => { ... }