【发布时间】:2018-10-03 09:49:31
【问题描述】:
我已经为我的应用程序创建了一个备份和恢复过程。运行备份时,它将在与数据库相同的目录中创建 SQLite 数据库的 .zip 文件。
恢复数据库时,会重命名数据库,将其从EPOSDatabase.db3改为tempEPOS.db3
然后,在删除重命名的临时数据库之前,它会获取选定的文件并将其提取到同一位置,名称为 EPOSDatabase.db3。
string dbPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
if (File.Exists(dbPath + "/tempEPOS.db3"))
{
File.Delete(dbPath + "/tempEPOS.db3");
};
File.Move(dbPath + "/EPOSDatabase.db3", dbPath + "/tempEPOS.db3");
ZipFile.ExtractToDirectory(dbPath + "/" + fileToRestore, dbPath + "/EPOSDatabase.db3");
File.Delete(dbPath + "/tempEPOS.db3");
我的问题是当我有打开连接的代码时,例如当我在执行还原后打开系统设置页面时,我收到一个错误:
“无法打开数据库文件:/data/user/0/com.companyname.ACPlus_MobileEPOS/files/EPOSDatabase.db3 (CannotOpen)”
作为进一步的调试测试,我将这段代码添加到应用程序的启动中:
string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
foreach (var file in Directory.GetFiles(path))
{
string strFile = Convert.ToString(file);
}
public readonly string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "EPOSDatabase.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<Category>();
db.CreateTable<SystemSettings>();
db.Close();
在 foreach 循环中,它只找到了我试图从中恢复的原始 .zip 文件。
然后当它到达线时
var db = new SQLiteConnection(dbPath);
使用消息创建数据库失败
“无法打开数据库文件:/data/user/0/com.companyname.ACPlus_MobileEPOS/files/EPOSDatabase.db3”
文件似乎不存在,所以没有正确提取,但如果是这种情况,为什么它不只是创建一个新数据库,而不是尝试打开它?
【问题讨论】:
-
重新检查您的提取逻辑
-
@Nkosi 我看不出逻辑错在哪里?在重命名当前数据库之前,它会检查任何未删除的旧重命名数据库。然后,在删除旧版本之前,它将 .zip 文件提取到与数据库路径使用的目录和名称相同的目录 - 我错过了什么?
-
特别是
ExtractToDirectory。您正在将 zip 文件的内容解压缩到名为EPOSDatabase.db3的 目录。您是否真的查看了该位置以了解由于代码而发生的情况?