二进制文件读取的程序时遇到的问题

howyougen 2004-05-02 10:39:33
大家好:
我在写一个二进制文件读取的程序时遇到一个问题,向大家请教一下

//////////////////////////////////////////////////////////////////////////
二进制的文件的格式是这样的:

文件头+字段定义部分+记录部分

文件头H(head) :字段总个数+记录总个数
字段定义部分F(fields):字段名称+字段类型+字段占用字节长度+字段在一条
记录中的偏移位置
记录部分R(records) :具体的记录

//////////////////////////////////////////////////////////////////////////
具体的例子(用ultraedit8.0显示,为了大家看的更清楚,我调整了一下每行显示的位置)
02 00 03 00 <---注1
4e 41 4d 45 20 20 20 20 00 | 63 | 08 00 | 00 00 ;NAME |.c...<---注2
41 47 45 20 20 20 20 20 00 | 6e | 02 00 | 08 00 ;AGE |.i...
74 6f 6d 00 00 00 00 00 | 03 00 ;tom |3 <--注3
6a 65 72 72 79 00 00 00 | 0a 00 ;jerry |10
63 61 74 26 6d 73 00 00 | 01 00 ;cat&ms |1

注释1:为文件头部分 字段总个数=2 记录总个数=3
注释2:为字段定义部分
字段名 字段类型 字段占用字节长度 字段在一条
记录中的偏移位置
name c(char) 8 0
age i(int) 2 8
注释3:具体记录内容
////////////////////////////////////////////////////////////////////////// 因为 字段定义部分格式是固定的(注意是格式),
所以可以很=方便=的根据 :
1。文件头->字段总个数
2。字段定义部分
读入一个结构数组之中
struct field{
char name[9]; //字段名
char type;//类型符
unsigned short len;//长度
unsigned short pos;//在一条记录中的起始位
}
比如用
struct field *g_pfield=0;
g_pfield=new field[g_head.no_field]; //g_head.no_field:字段个数
fread(g_pfield,sizeof(field),(g_head.no_field),g_fp); //g_fp:
文件指针

可是在读入记录内容时遇到了麻烦!!!!!!!!!!!!!!!!!!!!!!!
我不能事先定义一个这样的结构:
struct record{
char name[8]; //姓名
int age; //年龄
}
因为字段是不确定的(个数,类型)
所以我现在只能是把记录部分整个读入一个缓冲区内,然后逐记录分析,然
后在记录内再逐字段的分析, 很不方便!!!!!!!!!
比如用:
char * g_precbuffer; //g_precbuffer:缓冲区指针
g_precbuffer=new char[buf_len]; //buf_len:所有记录
总长度
fread(g_precbuffer,buf_len,1,g_fp);

尽管实际上记录部分已经是结构化的,
我也没办法把它们象‘字段定义部分’那样读入到一个结构数组里去
方便的处理。

有没有什么方法(有没有这样的类,或者函数)
能够把‘记录部分’象‘字段定义部分’那样读入到一个数组之中/或者
其他的解决的技巧呢?
毕竟‘记录部分’是严格的结构化的,而且这部分结构化的信息已经存在
于‘struct fields数组’之中了

谢谢!!
...全文
62 1 点赞 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yueshujiang 2004-05-14
www.pcvc.net
www.vckbase.com
www.vchelp.net
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库
加入

3957

社区成员

VC/MFC 数据库
申请成为版主
帖子事件
创建了帖子
2004-05-02 10:39
社区公告
暂无公告