zoukankan      html  css  js  c++  java
  • 读取DBF文件的部分代码

            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;
                }
            }
    
  • 相关阅读:
    C he 指针
    typedef 与 define
    (转)ubuntu中安装man手册查看函数原型
    .9 赫夫曼编码
    .8 AVL树
    PowerDesigner使用技巧
    C#基础
    NET框架设计
    Sql Server 执行计划及Sql查询优化
    SQL SERVER函数浅析
  • 原文地址:https://www.cnblogs.com/len0031/p/3956149.html
Copyright © 2011-2022 走看看