C#使用FastDBF库读取DBF文件导出行数与Excel显示行数不一致问题
排查方向
- 已删除记录过滤规则差异
FastDBF默认读取时会自动跳过DBF中被标记为删除状态的记录,而MS Excel打开DBF文件时默认会展示所有包括标记为删除的记录,这是两类工具行数不一致的最常见原因。你可以查看DbfRecord类是否提供IsDeleted属性,或者查阅FastDBF的配置项,确认是否有开关可以关闭已删除记录的自动过滤逻辑。 - 读取异常提前终止循环
你现有代码中odbf.Read(i, orec)返回false时直接执行break跳出循环,如果中间某条记录因为编码不匹配、格式损坏等问题读取失败,会直接终止后续所有记录的读取,而非跳过单条错误记录。你可以将break替换为continue测试,统计最终导出的总行数,同时可以添加日志确认Read方法首次返回false时的循环变量i值,确认是否未遍历完所有记录就提前终止。 - DBF文件头记录数不准确
部分非标准生成的DBF文件,头部存储的RecordCount字段值和实际物理存储的记录数不一致,Excel读取时会遍历整个文件统计实际记录数,而你的循环上限是odbf.Header.RecordCount,建议先打印该字段的实际值,确认和Excel的28307是否一致。 - 编码匹配问题
你打开DBF时使用的是1252编码,如果该DBF是中文环境下生成的(比如GBK、GB2312编码),特殊字符会导致记录解析失败,你可以尝试替换为DBF实际对应的编码读取测试。 - 关联备注文件缺失
如果该DBF包含备注型字段,需要同目录下存在对应的.FPT/.DBT备注文件,若文件缺失或损坏,FastDBF读取到备注字段所在记录时会读取失败,导致提前终止。 - 代码语法疏漏检查
你贴出的代码中odbf.Open(Path.Combine(this.pathWithFile), FileMode.Open)行末尾缺少分号,确认是粘贴疏漏还是实际代码存在语法问题,如果是实际代码问题会导致逻辑执行异常。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

