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

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

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

在DbfHeader类的Read(BinaryReader reader)方法

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

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

 public enum DbfColumnType
{ /// <summary>
/// Character less than 254 length
/// ASCII text less than 254 characters long in dBASE.
///
/// Character fields can be up to 32 KB long (in Clipper and FoxPro) using decimal
/// count as high byte in field length. It's possible to use up to 64KB long fields
/// by reading length as unsigned.
///
/// </summary>
Character = , /// <summary>
/// Number Length: less than 18
/// ASCII text up till 18 characters long (include sign and decimal point).
///
/// Valid characters:
/// "0" - "9" and "-". Number fields can be up to 20 characters long in FoxPro and Clipper.
/// </summary>
/// <remarks>
/// We are not enforcing this 18 char limit.
/// </remarks>
Number = , /// <summary>
/// L Logical Length: 1 Boolean/byte (8 bit)
///
/// Legal values:
/// ? Not initialised (default)
/// Y,y Yes
/// N,n No
/// F,f False
/// T,t True
/// Logical fields are always displayed using T/F/?. Some sources claims
/// that space (ASCII 20h) is valid for not initialised. Space may occur, but is not defined.
/// </summary>
Boolean = , /// <summary>
/// D Date Length: 8 Date in format YYYYMMDD. A date like 0000-00- 00 is *NOT* valid.
/// </summary>
Date = , /// <summary>
/// M Memo Length: 10 Pointer to ASCII text field in memo file 10 digits representing a pointer to a DBT block (default is blanks).
/// </summary>
Memo = , /// <summary>
/// B Binary (dBASE V) Like Memo fields, but not for text processing.
/// </summary>
Binary = , /// <summary>
/// I Integer Length: 4 byte little endian integer (FoxPro)
/// </summary>
Integer = ,
/// <summary>
///yang:添加 F Float
/// </summary>
Float = ,
}
 public char ColumnTypeChar
{
get
{
switch(mType)
{
case DbfColumnType.Number:
return 'N'; case DbfColumnType.Character:
return 'C'; case DbfColumnType.Binary:
return 'B'; case DbfColumnType.Boolean:
return 'L'; case DbfColumnType.Date:
return 'D'; case DbfColumnType.Integer:
return 'I'; case DbfColumnType.Memo:
return 'M';
//yang:新加Float字段类型
case DbfColumnType.Float:
return 'F'; } throw new Exception("Unrecognized field type!"); }
}
public static DbfColumnType GetDbaseType(char c)
{
switch(c.ToString().ToUpper())
{
case "C": return DbfColumnType.Character;
case "N": return DbfColumnType.Number;
case "B": return DbfColumnType.Binary;
case "L": return DbfColumnType.Boolean;
case "D": return DbfColumnType.Date;
case "I": return DbfColumnType.Integer;
case "M": return DbfColumnType.Memo;
//yang:新加Float字段类型
case "F": return DbfColumnType.Number;
} throw new NotSupportedException(String.Format("{0} does not have a corresponding dbase type.", c)); }

关于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. windows笔记本触摸板的快捷键教程

    自从习惯了macbook的触摸板,根本就懒得使用鼠标.即实用,又便捷.但切换到windows笔记本的时候,总是不习惯使用触摸板. 今天查了一下微软的教程,发现windows现的已经做的相当不错了.但是 ...

  2. Review: Command-line about Git

    Git shanzm

  3. Windows服务器如何查看共享目录信息

    查看Windows服务器上的共享目录的相关信息,可以使用两种方式: 1:命令net share 查看: 2:通过计算机管理的Shared Folders查看

  4. Python总结(二)

    学习一门语言,首先就要学习它的数据类型和语法.这里与JS进行对比学习. 1.数据类型 python的数据类型有:数字(int).浮点(float).字符串(str),列表(list).元组(tuple ...

  5. 获取Iframe页面高度并赋值给Iframe以及获取iframe里的元素

    最近接手了别人的项目,别人用到了iframe,自己在实战中总结了一些关于iframe的小问题. 获取Iframe页面高度并赋值给Iframe Html <iframe name="co ...

  6. redis 安装时候遇到 jemalloc 问题记录

    https://www.cnblogs.com/lovemdx/p/3199886.html https://blog.csdn.net/yfkiss/article/details/7035579 ...

  7. 通俗理解ZooKeeper是如何保证数据一致性的

    https://blog.csdn.net/liuhaiabc/article/details/70771322 https://blog.csdn.net/zhaoyangjian724/artic ...

  8. Net包管理NuGet(3)搭建私服及引用私服的包

    1,打开vs创建项目(ASP.NET WEB空项目)假设命名为MyNuGet 空项目解决方案如图 2,右键引用>管理NuGet程序包>切到浏览搜索NuGet.Server然后安装(3.1. ...

  9. js面向对象学习

    纯属笔记,加强记忆,不是教程,欢迎纠错,没有逻辑,不太适合学习使用. -------------- 继承多态等太多概念难以理解,还是从实践中慢慢学吧!争取能大致看懂网上的开源的代码. -------- ...

  10. [转帖]为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。

    [终极解决方案]为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误.该进程 ID 为“XXXX”.数据字段包含错误号. ...