游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2077|回复: 2

文件流读写错误,跪求答案.

[复制链接]

11

主题

145

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-8-11 12:05:00 | 显示全部楼层 |阅读模式
今日在SDK下,定义了一结构: MAX=63
-------------h文件中-------------
struct object          //部件
        {
        public:
       char objname[20];   //物体名称          
       int code;           //代码
       char mdlfile[20];       //mdl文件路径
       char imgfile[20];       //图片文件路径(地图编辑器使用)
       int  move_type;     //初运动类型
       int  move_speed;    //部件运动速度
       int  after_type;    //中弹后运动类型,0为不响应中弹。      
        };
struct object objs[MAX];

然后在CPP中将个结构赋值后进行读写:
----Cpp文件中--------
void CObjectEditDlg::set_value()
for(int i=0;i<MAX;i++)
{       
   sprintf(objs.objname,"newobj%d",i+1);
   objs.code=i+1;
   sprintf(objs.imgfile,"yy.img");
   sprintf(objs.mdlfile,"xx.mdl");
   objs.move_type=rand()%100;
   objs.move_speed=rand()%100;
   objs.after_type=rand()%100;          
}

void CObjectEditDlg::save_bin()   //从数组中写进二进制文件中
{
        ofstream out("object.dat",ios:ut|ios::app|ios::trunc);
    for(int i=0;i<MAX;i++)
        {                    
           out.write((unsigned char *)&objs,sizeof(struct object));
          if(!out)
                  MessageBox("写文件失败");
        }
        if(out)
          MessageBox("已经将修改后的各部件属性写入object.dat文件");
        out.close();
   
}

void CObjectEditDlg::load_bin()   //从二进制文件中读到数组中
{
    ifstream in("object.dat");
        int i=0;
        while(!in.eof())
    {
               
            in.read((unsigned char *)&objs,sizeof(struct object));
                i=i+1;
        }       
         in.close();
}

结果写入的文件中,用记事本打开,发现有newobj63等字样,但读出文件,前20个结构是正确的,后面的全部变成乱码,希望有人指点一二,读写的dat文件付后:

sf_20078111255.rar

1.41 KB, 下载次数:

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2007-8-12 11:37:00 | 显示全部楼层

Re:文件流读写错误,跪求答案.

家里没有vc,无法测试你的代码
不过从代码来开,应该是不存在问题,你最好再写一个读取程序来读取数据验证是否正确
用记事本打开你的问题,会出现乱码应该是 objs.code=i+1; 这句发生了问题,在文件输入16个字符后,输入的是一个char == 2的字符,这个在记事本里无法显示,会导致后面的信息都变成乱码。如果真的要查看,最好找一个16进制的查看软件来看。
最后,不要跪求。

11

主题

145

帖子

176

积分

注册会员

Rank: 2

积分
176
 楼主| 发表于 2007-8-13 09:19:00 | 显示全部楼层

Re:文件流读写错误,跪求答案.

呵呵,谢谢。
我开始以为是字符串的问题,后来我把这个问题简化了,直接在控制台程序下写了:

#include <iostream.h>
#include <fstream.h>
MAX=63
struct object          //部件
{
       int code;           //代码
};

int main()
{
  object objs[MAX],objx[MAX];
  for(int i=0;i<MAX;i++)
   {
     objx.code=i+1;
   }
   ofstream out("object.dat");
   for(int i=0;i<MAX;i++)
   {      
     out.write((unsigned char *)&objx,sizeof(struct object));
     if(!out)
         MessageBox("写文件失败");
   }
   if(out)
     MessageBox("已经将修改后的各部件属性写入object.dat文件");
   out.close();

   ifstream in("object.dat");
   for(i=0;i<MAX;i++)
   {      
     in.read((unsigned char *)&objs,sizeof(struct object));
     if(!in)
         MessageBox("读文件失败");
     cout<<objs.code;
   }
   return 0;
}

这样就成为了:编写一个控制台程序,里面有一个结构object,结构里只有一个int型,结构数组赋值后写入object.dat文件,然后用同样方法读出来,结果还是出错,前25个输出正确,到第26个以后的就出错了,而把这个int型改为float型则没问题了,真的很奇怪啊,这是怎么回事呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表