|
求指导在制作shape文件过程中,如何在.dbf文件中存储数据,以上是我在arcmap中打开的结果,以下是程序代码:
//写入dbf文件
FileStream fd = new FileStream(@"..\polygon.dbf", FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter bd = new BinaryWriter(fd);
byte dbf_version = 3;
bd.Write(dbf_version);
System.DateTime today = System.DateTime.Now;
byte[] date = new byte[3];
date[0] = Convert.ToByte(today.Year - 1900);
date[1] = Convert.ToByte(today.Month);
date[2] = Convert.ToByte(today.Day);
for (int i = 0; i < 3; i++)
{
bd.Write(date);
}
int recordnumb = RecorderNumber; //文件中的记录数
bd.Write(recordnumb);
short HeaderByteNum; //文件头中的字节数
HeaderByteNum = Convert.ToInt16(33 + 13 * 32); //记录项个数,默认为1
bd.Write(HeaderByteNum);
short RecordByteNum = 8; //一条记录中的字节数
bd.Write(RecordByteNum);
short Reservd1 = 0; //保留字节
bd.Write(Reservd1);
byte Flag4s = 0; //表示未完成的操作
bd.Write(Flag4s);
byte EncrypteFlag = 0; //编密码标记
bd.Write(EncrypteFlag);
int Unused1 = 0;
for (int i = 0; i < 3; i++) //保留字节,用于多用户处理时使用
{
bd.Write(Unused1);
}
byte MDXFlag = 0; //DBF文件的MDX标志
bd.Write(MDXFlag);
byte LDriID = 77; //Language driver ID
bd.Write(LDriID);
short Reserved2 = 0; //保留字节
bd.Write(Reserved2);
for (int i1 = 0; i1 < 10; i1++) //创建10个记录项
{
byte[] name = new byte[11]; //记录项名称,是ASCII码值
name[0] = 84; // 'I'
byte[] nameTemp = new byte[4];
nameTemp = BitConverter.GetBytes(48 + i1);
for (int i = 0; i < 4; i++)
{
name[1 + i] = nameTemp;
}
for (int i = 5; i < 11; i++)
{
name = 0;
}
for (int i = 0; i < 11; i++)
{
bd.Write(name);
}
byte fieldType = 70;
bd.Write(fieldType);
int reserved3 = 0; //保留字节
bd.Write(reserved3);
byte fieldLength = 20; //记录项长度,二进制型
bd.Write(fieldLength);
byte decimalCount = 6; //记录项精度,二进制型
bd.Write(decimalCount);
short reserved4 = 0; //保留字节
bd.Write(reserved4);
byte workID = 0; //工作区ID
bd.Write(workID);
short[] Reserved5 = new short[5]; //保留字节
for (int i = 0; i < 5; i++)
{
Reserved5 = 0;
bd.Write(Reserved5);
}
byte mDXFlag1 = 0; //MDX标识
bd.Write(mDXFlag1);
}
byte terminator = 13; //记录项终止标志
bd.Write(terminator);
for (int ii = 0; ii <10; ii++)
{
for (int i = 0; i < RecorderNumber; i++)
{
bd.Write(elementDepth[ii]);//写入已知数据
}
}
bd.Close();
fd.Close();
Console.WriteLine("写入完成!!");
Console.ReadKey();
|
|