该库托管于GitHub,地址:https://github.com/SocialExplorer/FastDBF

贡献者应该都是老外,所以……

1、解析文件头,字段名部分如果有中文命名字段会出错

在DbfHeader类的Read(BinaryReader reader)方法

  1. //char[] buffer = new char[11];
  2. //buffer = reader.ReadChars(11);
  3. //string sFieldName = new string(buffer);
  4. //yang:ReadChars(11)读取中文字段名时会出错,已改为ReadBytes(11)//Encoding注意UTF-8与GBK
  5. byte[] bytes = reader.ReadBytes();
  6. string sFieldName = Encoding.Default.GetString(bytes);
  7. int nullPoint = sFieldName.IndexOf((char));
  8. if (nullPoint != -)
  9. sFieldName = sFieldName.Substring(, nullPoint);

2、在DbfColumn类,没有设定字段类型可能存在的Float

  1. public enum DbfColumnType
  2. {
  3.  
  4. /// <summary>
  5. /// Character less than 254 length
  6. /// ASCII text less than 254 characters long in dBASE.
  7. ///
  8. /// Character fields can be up to 32 KB long (in Clipper and FoxPro) using decimal
  9. /// count as high byte in field length. It's possible to use up to 64KB long fields
  10. /// by reading length as unsigned.
  11. ///
  12. /// </summary>
  13. Character = ,
  14.  
  15. /// <summary>
  16. /// Number Length: less than 18
  17. /// ASCII text up till 18 characters long (include sign and decimal point).
  18. ///
  19. /// Valid characters:
  20. /// "0" - "9" and "-". Number fields can be up to 20 characters long in FoxPro and Clipper.
  21. /// </summary>
  22. /// <remarks>
  23. /// We are not enforcing this 18 char limit.
  24. /// </remarks>
  25. Number = ,
  26.  
  27. /// <summary>
  28. /// L Logical Length: 1 Boolean/byte (8 bit)
  29. ///
  30. /// Legal values:
  31. /// ? Not initialised (default)
  32. /// Y,y Yes
  33. /// N,n No
  34. /// F,f False
  35. /// T,t True
  36. /// Logical fields are always displayed using T/F/?. Some sources claims
  37. /// that space (ASCII 20h) is valid for not initialised. Space may occur, but is not defined.
  38. /// </summary>
  39. Boolean = ,
  40.  
  41. /// <summary>
  42. /// D Date Length: 8 Date in format YYYYMMDD. A date like 0000-00- 00 is *NOT* valid.
  43. /// </summary>
  44. Date = ,
  45.  
  46. /// <summary>
  47. /// M Memo Length: 10 Pointer to ASCII text field in memo file 10 digits representing a pointer to a DBT block (default is blanks).
  48. /// </summary>
  49. Memo = ,
  50.  
  51. /// <summary>
  52. /// B Binary (dBASE V) Like Memo fields, but not for text processing.
  53. /// </summary>
  54. Binary = ,
  55.  
  56. /// <summary>
  57. /// I Integer Length: 4 byte little endian integer (FoxPro)
  58. /// </summary>
  59. Integer = ,
  60. /// <summary>
  61. ///yang:添加 F Float
  62. /// </summary>
  63. Float = ,
  64. }
  1. public char ColumnTypeChar
  2. {
  3. get
  4. {
  5. switch(mType)
  6. {
  7. case DbfColumnType.Number:
  8. return 'N';
  9.  
  10. case DbfColumnType.Character:
  11. return 'C';
  12.  
  13. case DbfColumnType.Binary:
  14. return 'B';
  15.  
  16. case DbfColumnType.Boolean:
  17. return 'L';
  18.  
  19. case DbfColumnType.Date:
  20. return 'D';
  21.  
  22. case DbfColumnType.Integer:
  23. return 'I';
  24.  
  25. case DbfColumnType.Memo:
  26. return 'M';
  27. //yang:新加Float字段类型
  28. case DbfColumnType.Float:
  29. return 'F';
  30.  
  31. }
  32.  
  33. throw new Exception("Unrecognized field type!");
  34.  
  35. }
  36. }
  1. public static DbfColumnType GetDbaseType(char c)
  2. {
  3. switch(c.ToString().ToUpper())
  4. {
  5. case "C": return DbfColumnType.Character;
  6. case "N": return DbfColumnType.Number;
  7. case "B": return DbfColumnType.Binary;
  8. case "L": return DbfColumnType.Boolean;
  9. case "D": return DbfColumnType.Date;
  10. case "I": return DbfColumnType.Integer;
  11. case "M": return DbfColumnType.Memo;
  12. //yang:新加Float字段类型
  13. case "F": return DbfColumnType.Number;
  14. }
  15.  
  16. throw new NotSupportedException(String.Format("{0} does not have a corresponding dbase type.", c));
  17.  
  18. }

关于FastDBF库读写ArcGis dbf文件的小bug的更多相关文章

  1. ArcGis dbf读写——挂接Excel到属性表 C#

    ArcMap提供了挂接Excel表格信息到属性表的功能,但是当数据量较大到以万计甚至十万计的时候这个功能就歇菜了,当然,你可以考虑分段挂接.这个挂接功能只是做了一个表关联,属性记录每个字段的信息需要通 ...

  2. C# 使用 NPOI 库读写 Excel 文件

    NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples,给出 ...

  3. ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法

    2019年4月 拓展: ArcGis——好好的属性表,咋就乱码了呢? 2019年3月27日补充: 在ArcMap10.3+(根据官网描述应该是,作者测试使用10.5,可行)以后的版本,可以使用ArcT ...

  4. 《Java知识应用》Java读写DBF文件

    1. 准备: Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便 ...

  5. Java读取Level-1行情dbf文件极致优化(2)

    最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...

  6. Java读取Level-1行情dbf文件极致优化(1)

    最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...

  7. Java读取Level-1行情dbf文件极致优化(3)

    最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...

  8. C#生成DBF文件

    C# 生成DBF,无需注册Microsoft.Jet.OLEDB. namespace ConsoleApplication { class Program { static void Main(st ...

  9. JAVA用geotools读写shape格式文件

    转自:http://toplchx.iteye.com/blog/1335007 JAVA用geotools读写shape格式文件 (对应geotools版本:2.7.2) (后面添加对应geotoo ...

随机推荐

  1. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

  2. e2e测试框架之Cypress

    谈起web自动化测试,大家首先想到的是Selenium!随着近几年前端技术的发展,出现了不少前端测试框架,这些测试框架大多并不依赖于Selenium,这一点跟后端测试框架有很大不同,如Robot Fr ...

  3. QTableWidgetItem class

    Help on class QTableWidgetItem in module PyQt5.QtWidgets: class QTableWidgetItem(sip.wrapper)  |  QT ...

  4. .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂

    什么是时间戳(chuō)? 答:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 为什么时间戳要从1970年01月0 ...

  5. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  6. CSS弹性盒模型(flex box)

    本文介绍的是 CSS3 规范中引入的新布局模型:弹性盒模型(flex box).随着响应式用户界面的流行,Web 应用一般都要求适配不同的设备尺寸和浏览器分辨率. 浏览器支持: 弹性盒布局的容器(fl ...

  7. vue移动端常用组件

    3d picker组件 参考链接:https://segmentfault.com/a/1190000007253581?utm_source=tag-newest安装:npm install vue ...

  8. 微信h5支付

    分为 微信内H5调起支付 和 非微信浏览器H5支付. 1.H5支付(微信内) 参考链接:https://www.jianshu.com/p/6b9acdd10de6 2.JSAPI支付(非微信) 参考 ...

  9. form单选框

    form中的单选框: var resultStartRadio = new Ext.form.RadioGroup({ id : 'resultStartRadio', name :"for ...

  10. json打不开