LiteDB打开现有数据库文件时抛出System.IO.FileLoadException问题求助
LiteDB打开已存在数据库抛出System.IO.FileLoadException异常问题
打开已存在的LiteDB数据库时遇到异常:数据库文件确实存在,但打开时抛出System.IO.FileLoadException,异常堆栈信息如下:
Exception Info: System.IO.FileLoadException at LiteDB.Result`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].GetValue() at LiteDB.Engine.HeaderPage.LoadPage() at LiteDB.Engine.LiteEngine.Open() at LiteDB.Engine.LiteEngine..ctor(LiteDB.Engine.EngineSettings) at LiteDB.ConnectionString.CreateEngine(System.Action`1<LiteDB.Engine.EngineSettings>) at LiteDB.LiteDatabase..ctor(LiteDB.ConnectionString, LiteDB.BsonMapper)
架构层调用LiteDB的代码如下:
public LiteDatabase Instance { get; } public DBManager(string productName, string dbName, string dbPath) { _productName = productName; _dbName = dbName; Instance = new LiteDatabase(Path.Combine(dbPath, "XTOOLZ", _productName, _dbName)); }
数据库路径为:C:\Users\Public\Documents\treffsicherheitsnachweis.ch\TSN Card Generator\Database\XTOOLZ.TSNCard.Settings
数据库不存在时可正常创建,但再次调用打开时仍会抛出该异常,使用的是最新版NuGet包。
可能的原因及排查方案
1. 数据库文件损坏
创建数据库时如果程序异常退出、系统断电等,可能导致文件头部或数据块损坏,从而无法正常加载:
- 用LiteDB Studio打开该数据库文件,验证是否能正常读取。如果工具也无法打开,说明文件损坏。
- 尝试使用LiteDB的修复功能:
using var engine = new LiteEngine(new EngineSettings { Filename = "你的数据库路径", Repair = true }); engine.Checkpoint();
2. 文件权限或锁定问题
- 检查数据库文件的权限:右键文件 → 属性 → 安全,确认当前运行程序的用户拥有读写权限(即使Public目录默认开放权限,也可能被组策略或杀毒软件限制)。
- 排查文件是否被其他进程占用:用Process Explorer搜索该文件路径,看是否有未释放的进程持有文件句柄。如果有,关闭对应进程后重试。
3. 连接模式或路径问题
- 尝试显式指定连接字符串的
Connection参数为Shared,允许多个进程/实例访问:var fullPath = Path.Combine(dbPath, "XTOOLZ", _productName, _dbName); var connString = new ConnectionString($"Filename={fullPath}; Connection=Shared"); Instance = new LiteDatabase(connString); - 验证路径生成是否正确:在构造函数中打印
fullPath的值,确认和预期路径完全一致,避免因路径拼接错误导致加载错误的文件。
4. NuGet包版本兼容性
虽然使用的是最新版NuGet包,但如果创建数据库时使用的是旧版本,更新后可能出现兼容性问题:
- 删除现有数据库文件,用当前版本重新创建,再尝试打开,看是否仍报错。
内容的提问来源于stack exchange,提问作者user1035681
相关产品推荐
相关产品推荐

