CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

文件流问题

楼主xxqqhh_nn(shuibian)2005-09-13 08:52:31 在 C/C++ / C++ 语言 提问

ifstream   is("floor\\floorinfo.flr");  
          if(is)  
  {  
  is.read((char   *)&m_nFloorCount,sizeof(m_nFloorCount));  
  //这句不太明白  
  for(int   i=0;i<3;i++)  
          is.read((char   *)&m_FloorStruct[i],sizeof(m_FloorStruct[i]));    
  }  
  else{  
  MessageBox(NULL,"无法打开地块文件","error",0);  
  return   false;  
  }  
  /////////////////////////////////////////////////////////////////////////////////  
  CFloor::CFloor(void)  
  {  
  m_nFloorCount=0;  
  } 问题点数:100、回复次数:6Top

1 楼junguo(junguo)回复于 2005-09-13 08:58:53 得分 20

就是读出文件中的一个数字。因为你要打开的文字中,保存一个数字,可能用它来记录保存到文件中的  
  struct总量,所以首先把它读出来。Top

2 楼zhouhuahai(道号"虚无")回复于 2005-09-13 09:16:03 得分 70

首先,fstream是basic_fstream模板类关于char的一个实例。  
   
  typedef   basic_fstream<char,   char_traits<char>   >   fstream;  
  basic_fstream的由basic_iostream派生的  
   
  template   <class   Elem,   class   Tr   =   char_traits<Elem>   >         class   basic_fstream   :   public   basic_iostream<Elem,   Tr>  
  basic_iostream是由basic_istream和basic_ostream派生的。  
   
  template   <class   Elem,   class   Tr   =   char_traits<Elem>   >       class   basic_iostream   :   public   basic_istream<Elem,   Tr>,             public   basic_ostream<Elem,   Tr>    
  我们使用的fstream::read实际上是   basic_istream::read().    
   
  basic_istremm&   read(E   *s,   streamsize   n);  
   
  而basic_istream是从basic_ios派生的  
   
  template   <class   Elem,   class   Tr   =   char_traits<Elem>   >       class   basic_istream             :   virtual   public   basic_ios<Elem,   Tr>  
  basic_ios是从ios_base派生的  
   
  template   <class   Elem,   class   Traits>       class   basic_ios   :   public   ios_base  
  在流的实现上,采取了缓冲区I/O的方式,每个stream对象中都有一个对于一个streambuf,对于流的操作缺省状态下是对于缓冲区的操作,直到出现迫使他和缓冲区同步的操作。  
  read()使用了同步缓冲区,read()读取的时候,如果发现缓冲区中的数据不够,就试图从关联的数据源(这里就是文件)来读取。Top

3 楼zhouhuahai(道号"虚无")回复于 2005-09-13 09:19:43 得分 0

read()函数,它的原型被定义如下:  
  read(   char*   addr,   streamsize   size   )  
   
  read()从输入流中提取size个连续的字节,并将其放在地址从addr开始的内存中。gcount()返回由最后一个read()调用提取的字节数。read()返回当前被调用的istream类对象。  
   
  is.read((char   *)&m_nFloorCount,sizeof(m_nFloorCount));  
  这里的意思就是从输入流中提取sizeof(m_nFloorCount)个连续的字节,并将其放在地址从m_nFloorCount开始的内存中.Top

4 楼zhouhuahai(道号"虚无")回复于 2005-09-13 09:20:16 得分 0

偶讲得很清楚了吧,几乎把整个流都说了出来了.呵呵..............Top

5 楼jiajun2001(Jagen(嘉俊))回复于 2005-09-13 09:25:31 得分 10

呵呵,佩服一下楼上的,真是热心阿。哈。  
   
  简单一点,就是读取一个整数。Top

6 楼xxqqhh_nn(shuibian)回复于 2005-09-13 10:13:16 得分 0

ifstream   is("floor\\floorinfo.flr");  
          if(is)  
  {  
  is.read((char   *)&m_nFloorCount,sizeof(m_nFloorCount));  
  for(int   i=0;i<m_nFloorCount;i++)//这里有修改  
          is.read((char   *)&m_FloorStruct[i],sizeof(m_FloorStruct[i]));    
  }  
  else{  
  MessageBox(NULL,"无法打开地块文件","error",0);  
  return   false;  
  }  
  我知道了,原来他的程序有不严谨的地方.原来的for(int   i=0;i<3;i++)应该为for(int   i=0;i<m_nFloorCount;i++).我本来就不知道文件里的内容是什么.谢谢大家Top

相关问题

  • 关于流文件
  • 文件流问题
  • 关于文件流。。。
  • 文件流问题
  • 关于文件流
  • 获得网络流文件
  • 怎样操作流文件
  • 文件流的问题。
  • 流怎么写入文件
  • 如何寫入文件流??

关键词

  • basic
  • template
  • nfloorcount
  • 缓冲区
  • istream
  • 派生
  • fstream
  • read
  • 提取
  • iostream

得分解答快速导航

  • 帖主:xxqqhh_nn
  • junguo
  • zhouhuahai
  • jiajun2001

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo