读取DBF文件的部分代码
2014-09-04 15:12
330 查看
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; } }
相关文章推荐
- java读取文件封装的一个类(有部分代码借鉴别人的)
- java 读取 dbf数据库的dbf文件代码
- java读取文件封装的一个类(有部分代码借鉴别人的)
- ITK、VTK、Qt读取与显示DICOM文件------代码部分
- 读取文件的代码
- ASP.NET中读取XML文件信息的4种方法与示例代码
- .net(c#)读取*.dbf文件数据的类库
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
- 读取foxpro格式的dbf文件
- IIS6.0日志文件分析代码_3线程读取文件到数据库
- asp读取远程文件并保存到本地代码
- 控件操作类文件的部分手写代码
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
- 读取配置文件,简单代码
- IIS6.0日志文件分析代码_3线程读取文件到数据库
- ASP.NET中读取XML文件信息的4种方法与示例代码
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
- .NET读取foxpro dbf文件
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
- 读取csv文件代码