我在寫一個Windows應用商店應用程序。我必須在某些情況下重新創建數據庫(測試,新用戶等) - 正在使用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將其刪除在第二個呼叫過程中被拋出 - 看到評論。我不知道什麼可以打開這個文件。看到我將對SQliteAsyncConnetion的引用歸爲空,並強制收集所有代。不過,我無法刪除文件 - {「訪問被拒絕(來自HRESULT的異常:0x80070005(E_ACCESSDENIED))」}。
正在ApplicationData.Current.LocalFolder.Path中創建文件。
目前我正在嘗試在每次集成測試期間重新創建數據庫。