MFC读取二进制文件的问题

gongzheng79 2010-05-16 02:48:55
我这里有一个二进制文件需要用C++读取,该文件的格式和要求为:

0 ~ 255 字节为文件头,该内容不用;

从 256 字节开始为数据。每 128 字节为一个数据帧。
每个数据均为整形数(即占用2字节),每个数据帧含64个整形数。

64个整形数依次为:
年、月、日、时、分、秒、V1、V2
I1、I2、F1、F2、T1、T2、D1、D2
D3、D4、D5、D6、D7、D8、D9、D10
D11、D12、D13、D14、D15、D16、D17、D18
D19、D20、D21、D22、D23、D24、D25、D26
D27、D28、D29、D30、D31、D32、D33、D34
D35、D36、D37、D38、D39、D40、D41、D42
D43、D44、D45、D46、D47、D48、D49、D50

其中:V1、V2为电压;I1、I2为电流;F1、F2为频率;T1、T2为温度,在实际测量中均没有使用。

D1 ~ D50为在实际使用中的用户数据,你们可以任选其中几个使用。

我现在编写了个头,接下去不知道要如何进展,还望高手指点我这个菜鸟~
#include "stdafx.h"
#include "duqu.h"

CFile file;
file.Open("F:\毕设:\2008-4-7.dat",CFile::modeRead|CFile::typebinary);
int len,j,n;
len=CFile::GetLength();
...全文
1799 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimette 2013-01-10
  • 打赏
  • 举报
回复
heqiao001 2012-12-19
  • 打赏
  • 举报
回复
第一步:CFile file;定义在头文件中 第二步:在函数部分写入以下代码 // TODO: Add your command handler code here file.Open("C:\\yourname.txt",CFile::modeRead|CFile::typeBinary); int iLen = file.GetLength(); BYTE* pData = new BYTE[iLen+1]; file.ReadHuge(pData,iLen); pData[iLen] = 0; MessageBox((char*)pData);
wangli820 2010-05-17
  • 打赏
  • 举报
回复
1. file.Open("F:\毕设:\2008-4-7.dat",CFile::modeRead|CFile::typebinary);
有问题应当改为
file.Open("F:\\毕设:\\2008-4-7.dat",CFile::modeRead|CFile::typebinary);
2. 定义一个结构体,用来读数据,是最合适不过了
typedef struct tagDATA
{
SHORT nYear;
SHORT nMonth;
...
SHORT D49;
SHORT D50;
}DATA;

在读文件中循环调用,把数据都读到结构体中,然后就可以方便的处理
finder_zhang 2010-05-17
  • 打赏
  • 举报
回复
留个QQ,发个工程来研究一下啦.
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
finder_zhang兄台,我听你的,但是依然不行~抓狂了啊。。。。。。
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
原来是这样,我的是MFC的DLG,你的是控制台.

不过我又试了一下控制台下的MFC,代码也是可以的,不用加任何的头文件了,就是控制台的MFC里面HELLOWORLD里面加.

// TODO: code your application's behavior here.
CFile file;
CFileException e;
BOOL bOk = file.Open("C:\\abc\\yourname.txt",CFile::modeRead|CFile::typeBinary,&e);
if (!bOk)
{
if(CFileException::badPath == e.m_cause)
TRACE("错误文件路径\n");
}
int iLen = file.GetLength();
char* pData = new char[iLen+1];
file.ReadHuge(pData,iLen);
pData[iLen] = 0;
TRACE(pData);
delete [] pData;

CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
你的头文件有哪些?是在MFC下的控制平台运行的么?
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
找不到 ; ,应该又是什么地方写错了一些.

整个文件COPY出来吧.
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
如果是这样
CFile file;
CFile file;
这样写了2次,就会写你的那个重定义的错误了.

看看是不是上面与下面写了多次.

都是一些不小心写错的事,慢慢找找就好了.
TANG_XIAO_BIN 2010-05-16
  • 打赏
  • 举报
回复
用标准c函数 fopen fseek
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
test01.cpp
F:\毕设\贡正2\test\test01.cpp(6) : error C2143: syntax error : missing ';' before 'if'
F:\毕设\贡正2\test\test01.cpp(7) : error C2143: syntax error : missing ';' before '{'
F:\毕设\贡正2\test\test01.cpp(7) : error C2447: missing function header (old-style formal list?)
执行 cl.exe 时出错.

test.exe - 1 error(s), 0 warning(s)
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 finder_zhang 的回复:]
什么错误发一下啊?
[/Quote]
错误见7楼所呈现的!
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
的确试过单 \ 是不行的,双 \\ 才可以,但在根目录时是刚好我们混了过去.

CFile file;
CFileException e;
BOOL bOk = file.Open("C:\abc\name.txt",CFile::modeRead|CFile::typeBinary,&e);
if (!bOk)
{
if(int(CFileException::badPath) == e.m_cause)
MessageBox("错误文件名");
}
这个单 \ 的会报错,双 \\ 就可以
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
什么错误发一下啊?
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
试了一下,原来写一个 \ 真的是不行的.
只是刚好在 C 盘的根目录才混了过去.
的确像11楼所说的要2个 \\ .
楼主的其他代码没发现什么问题喔.
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 finder_zhang 的回复:]
我就是因为试过代码,所以才发上来的.

file.Open("C:\yourname.txt",CFile::modeRead|CFile::typeBinary);
int iLen = file.GetLength();
BYTE* pData = new BYTE[iLen+1];
file.ReadHuge(pData,iLen);
pData[iLen] = 0;
Me……
[/Quote]
但是现在我试了一下,出现了一个错误,我估计是定义出现了问题,但是具体问题在哪里不明啊。。。伤脑筋~
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
的确,我看过一些资料,好像\没有什么大碍。。。
finder_zhang 2010-05-16
  • 打赏
  • 举报
回复
我就是因为试过代码,所以才发上来的.

file.Open("C:\yourname.txt",CFile::modeRead|CFile::typeBinary);
int iLen = file.GetLength();
BYTE* pData = new BYTE[iLen+1];
file.ReadHuge(pData,iLen);
pData[iLen] = 0;
MessageBox((char*)pData);

可以正常读取

在 printf() 之类的字符里面, \ 属于特殊的字符,后面可以跟其他组成转义字符,才要 \\ 写2个
gongzheng79 2010-05-16
  • 打赏
  • 举报
回复
多谢woaiwcy指出,您能否继续说一些这个程序的问题,我急需帮助,谢谢~
woaiwcy 2010-05-16
  • 打赏
  • 举报
回复
先不谈别的
"C:\yourname.txt"这个应该是
"C:\\yourname.txt"两杠的啊
加载更多回复(10)

16,473

社区成员

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

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

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