Я пишу приложение для Windows Store. Я должен воссоздать базу данных в некоторых случаях (тесты, новый пользователь и т. Д.) - используется Sqlite. Мне нужно скопировать существующую базу данных в резервную копию, удалить существующую базу данных и затем создать новый файл базы данных со схемой.Не удается удалить файл в приложении Windows Store. Доступ запрещен. (HRESULT: 0x80070005 (E_ACCESSDENIED))
Код:
public async Task<bool> CreateDatabaseAsync()
{
if (await PathUtils.FileExistsAsync(DbConstants.DbFileWithPath))
{
var currentDbFolder = await StorageFolder.GetFolderFromPathAsync(DbConstants.DbPath);
var currentdbFile = await StorageFile.GetFileFromPathAsync(DbConstants.DbFileWithPath);
await currentdbFile.CopyAsync(currentDbFolder, DbConstants.DbBackup, NameCollisionOption.ReplaceExisting);
//problem here with deletion
await currentdbFile.DeleteAsync(DbConstants.FilelDeletionOption);
}
return await CreateSchema();
}
private async Task<bool> CreateSchema()
{
var db = new SQLiteAsyncConnection(DbConstants.DbFileWithPath);
await db.CreateTablesAsync(typeof (Doc), typeof(DocAttachment));
db = null;
GC.Collect();
return true;
}
}
Если я вызываю метод CreateDatabaseAsync() два раза последовательно, файл базы данных будет создан при первом обращении и UnauthorizedAccessException будут выброшены во время его удаления во время второго вызова - см комментарий , Я не знаю, что может держать этот файл открытым. См., Что я null ссылку на SQliteAsyncConnetion и заставить коллекцию всех поколений. Тем не менее, я не могу удалить файл - {«Доступ запрещен». (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) »}.
Файл создается в ApplicationData.Current.LocalFolder.Path.
В настоящее время я пытаюсь воссоздать db во время каждого теста интеграции.