2017-01-16 5 views
1

Я использую FileSavePicker в своем приложении UWP, используя какой пользователь может резервировать файл базы данных sqlite. Проблема в том, что как только пользователь сохраняет файл, и я пытаюсь скопировать sqlite-файл во вновь созданный файл, я получаю UnauthorizedAccessException.Файл, созданный с FileSavePicker, не позволяющий копировать данные на нем

var file = await savePicker.PickSaveFileAsync(); 

if (file != null) 
{ 
    CachedFileManager.DeferUpdates(file); 
    //Exception on line below 
    await Task.Run(() => File.Copy(file.Path, dbFilePath, true)); 
    FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file); 
} 

Исключение я получаю,

{"Access to the path 'C:\\Users\\CurrentUser\\Desktop\\BackupFile.sqlite' is denied."} 

Насколько я читал о UWP приложений, приложение может получить доступ путь/файл, который поступает из FileSavePicker.

ответ

2

В UWP вы не можете получить доступ к файлам по их FilePath, приложение не имеет права (при этом некоторые методы из Файла класса бесполезны) - вы должны получить доступ к файлам через StorageFile (он использует брокер) , В вашем случае вы должны открыть Потоки для обоих файлов и скопировать их. Что-то вроде этого:

using (var writeStream = await file.OpenStreamForWriteAsync()) 
using (var readStream = await dbFile.OpenStreamForReadAsync()) 
{ 
    await readStream.CopyToAsync(writeStream); 
}