该库托管于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)); }

最新文章

  1. 修改MySQL默认字符集编码
  2. php-fpm重启关闭等操作
  3. NVIDIA显卡设置
  4. App测试时,区分客户端或服务器端导致问题产生的方法
  5. WPF中增加Month Calendar月历控件
  6. [Locked] Best Meeting Point
  7. 【HDOJ】2395 Alarm Clock
  8. Java基础知识强化77:正则表达式之获取功能(Pattern 和 Matcher类的使用)
  9. 解決 centos中-bash: vim: command not found
  10. java中浮点数的比较(double, float)(转)
  11. chapter 13_3 table访问的元方法
  12. redis数据类型:hashes
  13. django generic view - ListView
  14. Shell Scripts - 条件语句,case语句,function功能
  15. Docker-单宿主机下的网络模式
  16. 【数学建模】MATLAB语法
  17. Java Spring Boot VS .NetCore (一)来一个简单的 Hello World
  18. 推荐10本C#编程的最佳书籍
  19. What mind mapping software applications do you recommend.
  20. SiteMapPath基本用法

热门文章

  1. js 倒计时跳转
  2. Linux学习历程——Centos 7 chown命令
  3. Linux(一)—— Unix&amp;Linux 历史
  4. SQL insert into select 语句
  5. Python----数据预处理
  6. 微信小程序-表单笔记2
  7. ExcelPower_Helper插件下载与更新日志
  8. linux环境下vim创建java文件,并编译运行
  9. Django2 Django MTV模板
  10. 微信小程序音乐播放