吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 361|回复: 4
收起左侧

[已解决] 菜鸟求教c++内存读取问题

 关闭 [复制链接]
sundeam 发表于 2023-12-25 14:58
本帖最后由 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[nFileLen + 1];
        if(m_Buffer == NULL)
        {        AreaFile.Close();
                return 0;
        }
        AreaFile.Read(m_Buffer, nFileLen);
        AreaFile.Close();
        
        m_AreaCount  = (int)m_Buffer[8] & 0xff;
        m_pOffsetList = (DWORD*)&m_Buffer[12];
        
        DecodeGroupInfo((char *)&m_Buffer[m_pOffsetList[0]], nFileLen - m_pOffsetList[0]);
        ProcAreaInfo(pAreaInfo);

        return m_AreaCount;



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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| sundeam 发表于 2023-12-25 15:01
到内存读写这个地方就迷糊了
苏紫方璇 发表于 2023-12-25 22:43
yes2 发表于 2023-12-26 09:01
[C++] 纯文本查看 复制代码
 
 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[nFileLen + 1]; // 分配比文件大小多1字节的缓冲区大小。实际上一般是文本内容才需要末尾多一个\0的缓冲,二进制打开的话应该不需要
        if(m_Buffer == NULL)
        {        AreaFile.Close();
                return 0;
        }
        AreaFile.Read(m_Buffer, nFileLen); // 按照文件大小读取文件数据到缓冲区m_Buffer
        AreaFile.Close();
// 下面的操作就是按照特定文件格式进行的特定操作了
        m_AreaCount  = (int)m_Buffer[8] & 0xff;
        m_pOffsetList = (DWORD*)&m_Buffer[12];
        
        DecodeGroupInfo((char *)&m_Buffer[m_pOffsetList[0]], nFileLen - m_pOffsetList[0]);
        ProcAreaInfo(pAreaInfo);

        return m_AreaCount;
 楼主| sundeam 发表于 2023-12-26 11:38
yes2 发表于 2023-12-26 09:01
[mw_shl_code=cpp,true]
if(AreaFile.Open(AreaFileName, CFile::modeRead|CFile::typeBinary) == 0)  / ...

感谢大佬的注释,这样就明白了,谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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