sundeam 发表于 2023-12-25 14:58

菜鸟求教c++内存读取问题

本帖最后由 sundeam 于 2023-12-25 14:59 编辑

各位大佬,我这里的是多年前一位大佬的开源项目代码,用于学习C++练习,现在呢,我想读写本地一个dat文件,源码是

int CWOLGroup::GetGroupInfo(PAREA_INFO pAreaInfo)//获取服务器 组信息
{
      long nFileLen = 0;
      CString AreaFileName = "group.dat";
      CFile AreaFile;

      if(AreaFile.Open(AreaFileName, CFile::modeRead|CFile::typeBinary) == 0)
      {      return 0;
      }
      nFileLen = AreaFile.GetLength();

      if(m_Buffer != NULL)
      {      delete m_Buffer;
                m_Buffer = NULL;
      }

      m_Buffer = new char;
      if(m_Buffer == NULL)
      {      AreaFile.Close();
                return 0;
      }
      AreaFile.Read(m_Buffer, nFileLen);
      AreaFile.Close();
      
      m_AreaCount= (int)m_Buffer & 0xff;
      m_pOffsetList = (DWORD*)&m_Buffer;
      
      DecodeGroupInfo((char *)&m_Buffer], nFileLen - m_pOffsetList);
      ProcAreaInfo(pAreaInfo);

      return m_AreaCount;



这个是怎么读写的,是写入内存,然后读取多少字节?还是怎么操作的?

sundeam 发表于 2023-12-25 15:01

到内存读写这个地方就迷糊了

苏紫方璇 发表于 2023-12-25 22:43

先获取文件大小,读取全部到m_Buffer里

yes2 发表于 2023-12-26 09:01


if(AreaFile.Open(AreaFileName, CFile::modeRead|CFile::typeBinary) == 0)// 打开文件
      {      return 0;
      }
      nFileLen = AreaFile.GetLength();   // 获取文件长度

      if(m_Buffer != NULL)// 如果缓冲区m_Buffer已经有数据就delete掉,避免内存泄露
      {      delete m_Buffer;
                m_Buffer = NULL;
      }

      m_Buffer = new char; // 分配比文件大小多1字节的缓冲区大小。实际上一般是文本内容才需要末尾多一个\0的缓冲,二进制打开的话应该不需要
      if(m_Buffer == NULL)
      {      AreaFile.Close();
                return 0;
      }
      AreaFile.Read(m_Buffer, nFileLen); // 按照文件大小读取文件数据到缓冲区m_Buffer
      AreaFile.Close();
// 下面的操作就是按照特定文件格式进行的特定操作了
      m_AreaCount= (int)m_Buffer & 0xff;
      m_pOffsetList = (DWORD*)&m_Buffer;
      
      DecodeGroupInfo((char *)&m_Buffer], nFileLen - m_pOffsetList);
      ProcAreaInfo(pAreaInfo);

      return m_AreaCount;

sundeam 发表于 2023-12-26 11:38

yes2 发表于 2023-12-26 09:01

if(AreaFile.Open(AreaFileName, CFile::modeRead|CFile::typeBinary) == 0)/ ...

感谢大佬的注释,这样就明白了,谢谢
页: [1]
查看完整版本: 菜鸟求教c++内存读取问题