菜鸟求教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;
这个是怎么读写的,是写入内存,然后读取多少字节?还是怎么操作的? 到内存读写这个地方就迷糊了 先获取文件大小,读取全部到m_Buffer里
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; yes2 发表于 2023-12-26 09:01
if(AreaFile.Open(AreaFileName, CFile::modeRead|CFile::typeBinary) == 0)/ ...
感谢大佬的注释,这样就明白了,谢谢
页:
[1]