using System.IO;
using System.Reflection;
using System.Xml;
FileStream refs = new FileStream("url.xls", FileMode.Open, FileAccess.Read);
byte[] infbytes = new byte[(int)refs.Length];
refs.Read(infbytes, 0, infbytes.Length);
refs.Close();
//将xls文件转换为byte 字节 url.xls读取路径
FileStream Wrfs = new FileStream("url.dbf", FileMode.Create, FileAccess.Write);
Wrfs.Write(infbytes, 0, infbytes.Length);
Wrfs.Close();
//将byte字节转换dbf文件 url.dbf保存路径
Common.DBFFile BC = new Common.DBFFile();
BC.Open("url.dbf");
DataSet ds = BC.GetDataSet();
BC.Close();
//打开dbf文件转换DataSet Common 打开路径
string xml_path = HttpContext.Current.Server.MapPath(file_name);
ds.WriteXml(xml_path);
ds.Dispose();
//DataSet 转换XML file_name文件名
string path = HttpContext.Current.Server.MapPath(xml_name);
XmlDocument xml = new XmlDocument();
xml.Load(path);
string strXmlTxt = xml.InnerText;
string strXml = xml.InnerXml; //用这种
DataSet ds = new DataSet();
if (!string.IsNullOrEmpty(strXml))
{
StringReader StrStream = null;
XmlTextReader Xmlrdr = null;
try
{
//读取字符串中的信息
StrStream = new StringReader(strXml);
//获取StrStream中的数据
Xmlrdr = new XmlTextReader(StrStream);
//ds获取Xmlrdr中的数据
ds.ReadXml(Xmlrdr);
}
catch (Exception)
{
}
finally
{
//释放资源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Common
{
/**/
/// <summary>
/// .dbf 文件的文件头信息类
/// </summary>
internal class DBFHeader
{
public const int DBFHeaderSize = 32;
/**/
/* 版本标志
0x02 FoxBASE
0x03 FoxBASE+/dBASE III PLUS,无备注
0x30 Visual FoxPro
0x43 dBASE IV SQL 表文件,无备注
0x63 dBASE IV SQL 系统文件,无备注
0x83 FoxBASE+/dBASE III PLUS,有备注
0x8B dBASE IV 有备注
0xCB dBASE IV SQL 表文件,有备注
0xF5 FoxPro 2.x(或更早版本)有备注
0xFB FoxBASE
*/
public sbyte Version;
/**/
/* 最后更新年 */
public byte LastModifyYear;
/**/
/* 最后更新月 */
public byte LastModifyMonth;
/**/
/* 最后更新日 */
public byte LastModifyDay;
/**/
/* 文件包含的总记录数 */
public uint RecordCount;
/**/
/* 第一条记录的偏移值,这个值也可以表示文件头长度 */
public ushort HeaderLength;
/**/
/* 记录长度,包括删除标志*/
public ushort RecordLength;
/**/
/* 保留 */
public byte[] Reserved = new byte[16];
/**/
/* 表的标志
0x01具有 .cdx 结构的文件
0x02文件包含备注
0x04文件是数据库(.dbc)
标志可OR
*/
public sbyte TableFlag;
/**/
/* 代码页标志 */
public sbyte CodePageFlag;
/**/
/* 保留 */
public byte[] Reserved2 = new byte[2];
}
internal class DBFField
{
public const int DBFFieldSize = 32;
/**/
/* 字段名称 */
public byte[] Name = new byte[11];
/**/
/* 字段类型 C - 字符型
Y - 货币型
N - 数值型
F - 浮点型
D - 日期型
T - 日期时间型
B - 双精度型
I - 整型
L - 逻辑型
M - 备注型
G - 通用型
C - 字符型(二进制)
M - 备注型(二进制)
P - 图片型
*/
public sbyte Type;
/**/
/* 字段偏移量 */
public uint Offset;
/**/
/* 字段长度 */
public byte Length;
/**/
/* 浮点数小数部分长度 */
public byte Precision;
/**/
/* 保留 */
public byte[] Reserved = new byte[2];
/**/
/* dBASE IV work area id */
public sbyte DbaseivID;
/**/
/* */
public byte[] Reserved2 = new byte[10];
/**/
/* */
public sbyte ProductionIndex;
}
/**/
/// <summary>
/// .dbf文件操作类
/// </summary>
public class DBFFile : IDisposable
{
private const string MSG_OPEN_FILE_FAIL = "不能打开文件{0}";
private bool _isFileOpened;
private byte[] _recordBuffer;
private DBFField[] _dbfFields;
private System.IO.FileStream _fileStream = null;
private System.IO.BinaryReader _binaryReader = null;
private string _fileName = string.Empty;
private uint _fieldCount = 0;
private int _recordIndex = -1;
private uint _recordCount = 0;
private DBFHeader _dbfHeader = null;
private string _tableName = string.Empty;
/**/
/// <summary>
/// 构造函数
/// </summary>
public DBFFile()
{
}
/**/
/// <summary>
/// 构造函数
/// </summary>
/// <param name="fileName"></param>
public DBFFile(string fileName)
{
if (null != fileName && 0 != fileName.Length)
this._fileName = fileName;
}
/**/
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this._recordBuffer = null;
this._dbfHeader = null;
this._dbfFields = null;
if (this.IsFileOpened && null != this._fileStream)
{
this._fileStream.Close();
this._binaryReader.Close();
}
this._fileStream = null;
this._binaryReader = null;
this._isFileOpened = false;
this._fieldCount = 0;
this._recordCount = 0;
this._recordIndex = -1;
}
}
/**/
/// <summary>
/// 打开dbf文件
/// </summary>
/// <returns></returns>
public bool Open()
{
try
{
return this.Open(null);
}
catch (Exception e)
{
throw e;
}
}
/**/
/// <summary>
/// 打开dbf文件
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public bool Open(string fileName)
{
if (null != fileName)
this._fileName = fileName;
bool ret = false;
try
{
if (!this.OpenFile())
{
// 不能打开dbf文件,抛出不能打开文件异常
throw new Exception(string.Format(MSG_OPEN_FILE_FAIL, this._fileName));
}
// 读取文件头信息
ret = this.ReadFileHeader();
// 读取所有字段信息
if (ret)
ret = this.ReadFields();
// 分配记录缓冲区
if (ret && null == this._recordBuffer)
{
this._recordBuffer = new byte[this._dbfHeader.RecordLength];
if (null == this._recordBuffer)
ret = false;
}
// 如果打开文件或读取信息不成功,关闭dbf文件
if (!ret)
this.Close();
}
catch (Exception e)
{
throw e;
}
// 设置当前记录索引为
this._recordIndex = -1;
// 返回打开文件并且读取信息的成功状态
return ret;
}
/// <summary>
/// 将字段类型转换为系统数据类型
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private Type FieldTypeToColumnType(sbyte type)
{
switch (type)
{
// C - 字符型、字符型(二进制)
case (sbyte)'C':
return typeof(System.String);
// Y - 货币型
case (sbyte)'Y':
return typeof(System.Decimal); // 虽然dbf中'Y'长度为64位,但是Double的精度不够,所以指定Decimal
// N - 数值型
case (sbyte)'N':
return typeof(System.Decimal); // dbf中'N'的精度可以达到19,所以用Decimal
// F - 浮点型
case (sbyte)'F':
return typeof(System.Decimal); // dbf中'F'的精度可以达到19,所以用Decimal
// D - 日期型
case (sbyte)'D':
return typeof(System.DateTime);
// T - 日期时间型
case (sbyte)'T':
return typeof(System.DateTime);
// B - 双精度型
case (sbyte)'B':
return typeof(System.Double);
// I - 整型
case (sbyte)'I':
return typeof(System.Int32);
// L - 逻辑型
case (sbyte)'L':
return typeof(System.Boolean);
// M - 备注型、备注型(二进制)
case (sbyte)'M':
return typeof(System.String);
// G - 通用型
case (sbyte)'G':
return typeof(System.String);
// P - 图片型
case (sbyte)'P':
return typeof(System.String);
// 缺省字符串型
default:
return typeof(System.String);
}
}
/**/
/// <summary>
/// 获取dbf表文件对应的DataSet
/// </summary>
/// <returns></returns>
public System.Data.DataSet GetDataSet()
{
// 确保文件已经打开
if (!this.IsFileOpened || (this.IsBOF && this.IsEOF))
return null;
// 构造表格
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.DataTable dt = new System.Data.DataTable(this._tableName );
try
{
// 添加表格列
for (uint i = 0; i < this._fieldCount; i++)
{
System.Data.DataColumn col = new System.Data.DataColumn();
string colText = string.Empty;
// 获取并设置列标题
if (this.GetFieldName(i, ref colText))
{
col.ColumnName = colText;
col.Caption = colText;
}
// 设置列类型
col.DataType = FieldTypeToColumnType(this._dbfFields[i].Type);
// 添加列信息
dt.Columns.Add(col);
}
// 添加所有的记录信息
this.MoveFirst();
while (!this.IsEOF)
{
// 创建新记录行
System.Data.DataRow row = dt.NewRow();
// 循环获取所有字段信息,添加到新的记录行内
for (uint i = 0; i < this._fieldCount; i++)
{
string temp = string.Empty;
// 获取字段值成功后才添加到记录行中
if (this.GetFieldValue(i, ref temp))
{
// 如果获取的字段值为空,设置DataTable里字段值为DBNull
// if (string.Empty != temp)
row[(int)i] = temp;
// else
// row[(int)i] = System.DBNull.Value;
}
}
// 添加记录行
dt.Rows.Add(row);
// 后移记录
this.MoveNext();
}
}
catch (Exception e)
{
throw e;
}
ds.Tables.Add(dt);
return ds;
}
/**/
/// <summary>
/// 获取相应索引序号处的字段名称
/// </summary>
/// <param name="fieldIndex"></param>
/// <param name="fieldName"></param>
/// <returns></returns>
public bool GetFieldName(uint fieldIndex, ref string fieldName)
{
// 确保文件已经打开
if (!this.IsFileOpened)
return false;
// 索引边界检查
if (fieldIndex >= this._fieldCount)
{
fieldName = string.Empty;
return false;
}
try
{
// 反解码
fieldName = System.Text.Encoding.Default.GetString(this._dbfFields[fieldIndex].Name);
//去掉末尾的空字符标志
int i = fieldName.IndexOf('