private void BtnOpenInitial_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = file.FileName;
DTable dbf = new DTable();
dbf.Load(path);
if (dbf.Table.Rows.Count > 0)
{
this.GrcInitialData.DataSource = dbf.Table;
_table = new DataTable();
_table = dbf.Table;
}
}
} /// <summary>
/// 从硬盘读取dbf文件
/// </summary>
/// <param name="filepath">路径</param>
/// <returns></returns>
public int Load(String filepath)
{
FileInfo FFile = new FileInfo(filepath);
if (FFile.Exists)
{
Stream fStream = new BufferedStream(new FileStream(filepath, FileMode.Open));//main.dbf
try
{
BinaryReader bReader = new BinaryReader(fStream);
//ByteDump(fStream);
return ReadDBF(bReader);
}
catch
{
ClearDataTable();
return -1;
}
finally
{
fStream.Close();
}
}
else
{
return -1;
}
} /// <summary>
/// 读取dbf
/// </summary>
/// <param name="bReader"></param>
/// <returns></returns>
private int ReadDBF(BinaryReader bReader)
{
if (ReadHeader(bReader) == 0)
{
if (ReadFieldDesc(bReader) == 0)
{
return readRecord(bReader);
}
else
return -1;
}
else
{
return -1;
}
} /// <summary>
/// 读取记录
/// </summary>
/// <param name="bReader"></param>
/// <returns></returns>
private int readRecord(BinaryReader bReader)
{
try
{
int iRecCount = _hearder.RecordCount;
for (int i = 0; i < iRecCount; i++)
{
DRow row = new DRow();
DataRow datarow = _table.NewRow();
row.RowIndex = i; byte bRecordFlag = bReader.ReadByte(); if (bRecordFlag == 0x20)
{
row.DeleteFlag = false;
}
else if (bRecordFlag == 0x2a)
{
row.DeleteFlag = true;
}
else
{
ClearDataTable();
return -1;
} for (short j = 0; j < _columns.ColumnCount; j++)
{
DColumn col = _columns.GetColumnByIndex(j);
if (col != null)
{ DField field = new DField();
field.Column = col;
byte[] bValue = bReader.ReadBytes(col.ColumnLength);
field.FieldValue = Encoding.Default.GetString(bValue);
row.AddField(field);
UpdateRowField(datarow, field);
}
else
{
return -1;
}
}
_rows.AddRow(row);
if (!row.DeleteFlag)
_table.Rows.Add(datarow);
} //if (_hearder.RecordCount > 0)
//{
// byte endflag = bReader.ReadByte();
// if (endflag != 0x1A)
// {
// ClearDataTable();
// return -1;
// }
//}
return 0;
}
catch
{
ClearDataTable();
return -1;
}
}

读取DBF文件的部分代码的更多相关文章

  1. C# 解决读取dbf文件,提示Microsoft Jet 数据库引擎找不到对象的问题

    前言 最新项目需要经常和dbf文件打交道,在实际场景中很多软件需要和一些老的系统进行数据交互,而这些系统都在使用foxpro数据库,读取dbf文件一般都是分为两种情况:第一:安装foxpro的驱动进行 ...

  2. php读取excel文件的实例代码

    php读取excel文件的实例代码. 代码: <?php /** * php读取excel文件 * by www.jbxue.com */ $this->loadexcel();//半酣p ...

  3. python3 读取dbf文件报错 UnicodeDecodeError: 'gbk' codec can't decode

    在读取dbf文件时由于编码问题报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xb5 in position 49: incomplete ...

  4. PHP读取超大文件的实例代码

    数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机   去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...

  5. PHPExcel读取Excel文件的实现代码

    <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...

  6. (实用篇)PHPExcel读取Excel文件的实现代码

    用PHPExcel读取Excel 2007 或者Excel2003文件,需要的朋友,可以参考下. 涉及知识点:  php对excel文件进行循环读取 php对字符进行ascii编码转化,将字符转为十进 ...

  7. 使用Python读取Dbf文件

    DBF:一种特殊的文件格式!表示数据库文件,Foxbase,Dbase,Visual FoxPro等数据库处理系统所产生的数据库文件! DBF 数据库是常用的桌面型数据库,它曾经被各企业.事业单位广泛 ...

  8. 读取DBF文件数据

    #region 返回DBF表 public static System.Data.DataTable getDTFromDBF(string fullPath) { string pDir = Sys ...

  9. shp系列(六)——利用C++进行Dbf文件的写(创建)

    上一篇介绍了shp文件的创建,接下来介绍dbf的创建. 推荐结合读取dbf的博客一起看! 推荐结合读取dbf的博客一起看! 推荐结合读取dbf的博客一起看! 1.Dbf头文件的创建 Dbf头文件的结构 ...

随机推荐

  1. Strategy策略模式

    策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换.该模式可使得算法能独立于使用它的客户而变化.Strategy模式是行为模式,正因为他是一种行为模式,所以他不是用来解决类的实例化的 ...

  2. Java I/O 对象序列化

    我们知道对象的持持久化有三种方式: 1: 对象序列化 2: XML 3: 数据库技术 序列化可以帮助使得对象的生命周期不取决与程序是否正在执行,它可以生存于程序的调用之间. 只要将任何对象序列化到单一 ...

  3. 四十条测试你是不是合格的PHP程序员

    四十条测试你是否合格的PHP程序员,不官方,也不权威,但很给力.超过三条就不合格了.超过五条就得好好反省下自己的不足了. 1. 不会利用如phpDoc这样的工具来恰当地注释你的代码 2. 对优秀的集成 ...

  4. E2 2014.07.01 更新日志

    增加功能   完善功能 电话报修单,添加可以发短信通知客户和技术员选项 商品历程分析,增加按商品分类条件统计 修件库,增加可以按维修商条件过滤,以方便查询某维修商的返修件 维修中,备件转销售时,自动读 ...

  5. eclipse查看jdk源码,及反编译查看

    jdk中的包: dt.jar是关于运行环境的类库,主要是swing的包 tools.jar是关于一些工具的类库 rt.jar包含了jdk的基础类库,也就是你在java doc里面看到的所有的类的cla ...

  6. Thinking in Java 笔记初衷

    当读到第十章的时候,发现之前读过的内容很难准确的记忆起来,这样给后续的阅读带来了一定的困惑,而之前也没有做适当的可读性的复习笔记,所以发现重新找后续阅读需要的知识点时,是有一定的困难的. 同时在知乎今 ...

  7. u盘在电脑读不出来,但别的可以读,别的u盘在我电脑又可以识别怎么回事?

    不知道我的U盘是怎么回事,在我自己的电脑里读不出来,下面有U盘图标,但我的电脑里就是找不到U盘盘符,但把这个U盘放其他电脑上又可以读取,我以为是我的电脑的问题,但用其他的U盘插我电脑又没问题,完全摸不 ...

  8. JavaWeb学习总结(三)—Servlet

    1. 什么是Servlet * Servlet是JavaWeb三大组件之一(Servlet.Filter.Listener) ,Servlet是用来处理客户端请求的动态资源,按照一种约定俗成的称呼习惯 ...

  9. (四)Ubuntu 14.04 文件服务器--samba的安装和配置

    samba是Linux系统上的一种文件共享协议,可以实现Windows系统访问Linux系统上的共享资源,现在介绍一下如何在Ubuntu 14.04上安装和配置samba一. 一.更新源列表 打开&q ...

  10. Java编程思想笔记

    打好java基础 后续会增加相应基础笔试题 目录如下 1 对象导论2 一切都是对象3 操作符4 控制执行流程5 初始化与清理6 访问控制权限7 复用类8 多态9 接口10 内部类11 持有对象12 通 ...