private void Btnopeninitial_click (object sender, EventArgs e) {OpenFileDialog file = new Openfi Ledialog (); 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>///read DBF file from HDD///</summary>//<param name= "fi Lepath "> Path </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>//Read 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>///Read record///</summary>//<param name= "Breader" >& lt;/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; } }
Partial code to read the DBF file