| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 736 人关注过本帖
标题:一段读文件的小程序~
只看楼主 加入收藏
Waiting_alone
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-10-28
收藏
 问题点数:0 回复次数:5 
一段读文件的小程序~
BYTE * m_pTempBuf;
char sRead[6];
short * m_pData;

for(DWORD j=0;j<m_item.size/192;j++)
{
     mfile.Read(sRead, 6);
     mfile.Read(m_pTempBuf, 186);    
     m_pTempBuf+=186;                                        
}
m_pData = (short *)m_pTempBuf;

我想要做的就是去掉每192字节中的前6个字节,并存入m_pTempBuf 里面  但上面的代码一运行就出问题..麻烦大家看下 ^~
  
搜索更多相关主题的帖子: 文件 
2008-11-24 18:44
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
mfile.Read(m_pTempBuf, 186);   //这里不正确,m_pTempBuf并没分配空间,函数Read并不会为你分配空间,这需要你在外部做这个工作.   
//如果不够192 ,很显然是不会去掉前六个字节的.
//如果最后一组只有不到六个的时候,也可能会出错.

    BYTE * m_pTempBuf = NULL ;
    BYTE * pTempBuf = NULL ;
    int counst = m_item.size ;//未读数据的长度
    char sRead[6];
    short * m_pData;
    if ( m_item.size/192 > 0 )
    {
        m_pTempBuf = new BYTE[(m_item.size/192)*186];
    }else if ( m_item.size > 0 )
    {
        m_pTempBuf = new BYTE[m_item.size];
    }

    pTempBuf = m_pTempBuf ;//游标

    if (NULL != pTempBuf)
    {
        for(DWORD j=0;j<=m_item.size/192;j++)
        {
            mfile.Read(sRead, (counst > 6)?6:counst );//如果不到六个,就只读余下的,否则读六个.
            counst -= ((counst > 6)?6:counst ); //余下的数据
            mfile.Read(pTempBuf, ( counst > 186 ) ? 186 : counst );//如果不到186个,就只读余下的,否则读186个.
            counst -= ((counst > 186)?186:counst ); //余下的数据
            pTempBuf+=186;
        }
    }
    m_pData = (short *)m_pTempBuf;
//m_pData可要记得在使用完后要delete.
2008-11-24 22:37
Waiting_alone
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-10-28
收藏
得分:0 
以下是引用debroa723在2008-11-24 22:37的发言:

mfile.Read(m_pTempBuf, 186);   //这里不正确,m_pTempBuf并没分配空间,函数Read并不会为你分配空间,这需要你在外部做这个工作.   
//如果不够192 ,很显然是不会去掉前六个字节的.
//如果最后一组只有不到六个的时 ...

这样做会不会第2次读入到pTempBuf里面的值把第一次覆盖掉.. 最后就剩下最后一次的值呢?
2008-11-24 23:11
沼泽
Rank: 4
等 级:业余侠客
威 望:8
帖 子:291
专家分:228
注 册:2008-9-15
收藏
得分:0 
去掉每192字节中的前6个字节,直接用文件指针定位函数Seek(6,CFile::current )就可以了
2008-11-25 09:15
Waiting_alone
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-10-28
收藏
得分:0 
以下是引用沼泽在2008-11-25 09:15的发言:

去掉每192字节中的前6个字节,直接用文件指针定位函数Seek(6,CFile::current )就可以了

然后呢? 怎样把读入到的186个字节依次赋给 BYTE* 指针呢? ~
2008-11-25 10:42
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
我给你的代码是可以完成你想要的任务的.
2008-12-03 23:46
快速回复:一段读文件的小程序~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036416 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved