文件问题...谢...

gxh2004 2004-11-22 12:05:19
我用一个文件来接收数据包.每个数据包有包号,我想客观做:把文件前512K划出来存包号.然后后面就用来依次存数据,在每次收到数据包后都要读前512K改存在里面的包号.然后在后面存数据.要用到哪几个函数?怎么做?
...全文
121 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallhunter 2004-11-22
  • 打赏
  • 举报
回复

up

是问什么函数啊,接收?读写文件?
yo_jo 2004-11-22
  • 打赏
  • 举报
回复
用read()加上memcpy()完全可以实现你的需求

bool CControlSDT::ReadSDTFILE()
{
/*
*********************************************************************
* 函数说明:从硬盘记录的sdt文件中提取相关数据
* 将这些数据赋给相应的结构体
* 输 入 值:strEdition -> 记录文件的版本号
* Channel_ID -> 通道号
* pbData -> 缓存的数据
* lDataLength -> 数据长度
* ltime -> 记录开始的时间
* 输 出 值:
* 返 回 值:bool型,操作是否成功
* 编 写 人:yo_jo
* 创建时间:2004-10-20 pm
*********************************************************************
*/

try
{
// 打开文件
CFile f((LPCTSTR)m_strFileName, CFile::modeRead);

// 定义一个内存块,并将文件内容读出后保存在这个内存块中
BYTE* pt = new BYTE[m_lFileSize];

f.Read(pt, m_lFileSize);

// 构造各个文件结构体变量的内容
long lTmp=0;
CString strTmp;
int iSaveYear, iSaveMonth, iSaveDay, iSaveHour, iSaveMin, iSaveSec;

// 构造[文件头]结构体
memcpy(&m_FileHeadInfo, pt+lTmp, sizeof(struct _HEAD_SDTFILE));
lTmp += (long)sizeof(struct _HEAD_SDTFILE);

FILEHEAD_strType = unchar2string(m_FileHeadInfo.cType, 16);
// <-- 在此处加上文件的判断
// 是speechdata文件才继续读取,不是则提示并返回
if (FILEHEAD_strType != "HJ08A-SpeechData")
{
AfxMessageBox("文件的格式不正确,读取文件失败!");
return false;
}
strTmp = unchar2string(m_FileHeadInfo.cChangeTime, 16);
iSaveYear = atoi(strTmp.Mid(0,4));
iSaveMonth = atoi(strTmp.Mid(4,2));
iSaveDay = atoi(strTmp.Mid(6,2));
iSaveHour = atoi(strTmp.Mid(9,2));
iSaveMin = atoi(strTmp.Mid(11,2));
iSaveSec = atoi(strTmp.Mid(13,2));
FILEHEAD_tmSaveTime = CTime(iSaveYear, iSaveMonth, iSaveDay, iSaveHour, iSaveMin, iSaveSec);
FILEHEAD_strEdition = unchar2string(m_FileHeadInfo.cEditonNo, 6);
strTmp = unchar2string(m_FileHeadInfo.cStartEndTime, 32);
iSaveYear = atoi(strTmp.Mid(0,4));
iSaveMonth = atoi(strTmp.Mid(4,2));
iSaveDay = atoi(strTmp.Mid(6,2));
iSaveHour = atoi(strTmp.Mid(9,2));
iSaveMin = atoi(strTmp.Mid(11,2));
iSaveSec = atoi(strTmp.Mid(13,2));
FILEHEAD_tmStartTime = CTime(iSaveYear, iSaveMonth, iSaveDay, iSaveHour, iSaveMin, iSaveSec);
iSaveYear = atoi(strTmp.Mid(16,4));
iSaveMonth = atoi(strTmp.Mid(20,2));
iSaveDay = atoi(strTmp.Mid(22,2));
iSaveHour = atoi(strTmp.Mid(25,2));
iSaveMin = atoi(strTmp.Mid(27,2));
iSaveSec = atoi(strTmp.Mid(29,2));
FILEHEAD_tmEndTime = CTime(iSaveYear, iSaveMonth, iSaveDay, iSaveHour, iSaveMin, iSaveSec);
FILEHEAD_uiDataAddress = (unsigned int)unchar2int(m_FileHeadInfo.cDataAdd, 6);
FILEHEAD_strTrainNo = unchar2string(m_FileHeadInfo.cTrainNo, 4);

// 构造[数据头]结构体
memcpy(&m_DataHeadInfo[0], pt+lTmp, sizeof(struct _HEAD_SDTDATA));
lTmp += (long)sizeof(struct _HEAD_SDTDATA);

DATAHEAD_uiChannelNo = (unsigned int)unchar2int(m_DataHeadInfo[0].cChannelNo, 2);
strTmp = unchar2string(m_DataHeadInfo[0].cSaveTime, 16);
iSaveYear = atoi(strTmp.Mid(0,4));
iSaveMonth = atoi(strTmp.Mid(4,2));
iSaveDay = atoi(strTmp.Mid(6,2));
iSaveHour = atoi(strTmp.Mid(9,2));
iSaveMin = atoi(strTmp.Mid(11,2));
iSaveSec = atoi(strTmp.Mid(13,2));
DATAHEAD_tmSaveTime = CTime(iSaveYear, iSaveMonth, iSaveDay, iSaveHour, iSaveMin, iSaveSec);
DATAHEAD_ulDataLength = (unsigned long)unchar2int(m_DataHeadInfo[0].cDataLength, 8);

// 构造[数据部分]结构体
DATADETAIL_ulLength = DATAHEAD_ulDataLength;
DATADETAIL_pbData = new BYTE[DATADETAIL_ulLength];

memcpy(DATADETAIL_pbData, pt+lTmp, DATADETAIL_ulLength);
lTmp += (long)DATADETAIL_ulLength;


// 构造[数据尾]结构体
memcpy(&m_DataTailInfo[0], pt+lTmp, sizeof(struct _TAIL_SDTDATA));
lTmp += (long)sizeof(struct _TAIL_SDTDATA);

DATATAIL_strEnd = unchar2string(m_DataTailInfo[0].cEnd, 3);
if (DATATAIL_strEnd != ".ND")
{
AfxMessageBox("文件尾验证失败,读取文件失败!");
delete []pt;
return false;
}

// 构造结束,释放pt
delete []pt;
return true;
}
catch (CFileException *e) // 捕捉错误
{
e->ReportError();
e->Delete();

return false;
}
}
gxh2004 2004-11-22
  • 打赏
  • 举报
回复
就是怎么把数据和包号写进文件

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧