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. python_way ,day2 字符串,列表,字典,时间模块

    python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...

  2. 关于Docker在测试方面的应用

    Docker 火了很长一段时间了,前段时间简单的学习和试玩了一下子,发现他对测试很有价值,觉得有必要再次深入研究. 这里标记一些较好的学习网址,用作参考: InfoQ上面有系列的文章: 深入浅出Doc ...

  3. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  4. struts2 if正确标签示例

    下面总结一下struts2 中if标签的使用 (1)判断字符串是否为空 <s:if test="user.username==null or user.username==''&quo ...

  5. JS 命名冲突

    1. JS中全局变量和局部变量重名会导致在指定域内无法取到变量: 2. 取出的结果为undefined;

  6. mysql 聚集函数和分组

    1.sc表的内容如下:mysql> select * from sc order by sid asc;+----+-------+-----+-------+| ID | SID | CID ...

  7. mysql 检查字符串是否包含子串

    1.使用substring_index(src,target,index) 从src的开头查找第index个target.返回的substring为从src的开头到第num个target这段字符串.比 ...

  8. 转:Google全程面试题目(未完成)

    转自:http://kb.cnblogs.com/page/95951/ 经过了三个月的断断续续的面试和准备,最近一阵抓了很多时间努力准备, 本以为最后的一次面试能弥补前面的不足,可惜还是功亏一篑.. ...

  9. Spring MVC 之文件上传(七)

    SpringMVC同样使用了apache的文件上传组件.所以需要引入以下包: apache-commons-fileupload.jar apache-commons-io.jar 在springAn ...

  10. dom jaxp详解

    转自 http://blog.csdn.net/java958199586/article/details/7277904 一.XML解析技术概述 1.XML解析方式分为两种:dom和sax (1)d ...