如何用CFile读取二进制文件?

新生代码农NJ 2008-03-19 10:11:15
int i,j,n;
CFile file;
j=0;n=0;
char filename[20];
strcpy(filename,LPCTSTR(m_filename));//??????????把CString 赋值给char数组?
//第一行多32数据必须单独处理
for(i=0;i<8224;i++)
{

TRY
{
//以只读模式打开文件

file.Open(filename,CFile::modeRead|CFile::typeBinary);///这里有问题吗?
ULONGLONG flength;
//获得文件的长度
flength=file.GetLength();
//读取数据到缓冲区
UINT nBytesRead=file.Read(&a[j][i],1);
if(i>=32) // ////////////多出32个数据
{
b[j][n]=a[j][i];
n++;
}
AfxMessageBox(a[j][i]);

}

CATCH_ALL(e)
{
file.Abort();//关闭文件
THROW_LAST();
}
END_CATCH_ALL
//file.close();

}
我用的是MFC,m_filename在对话框中获得("1.csd"),但运行是总是说找不到这个文件,不知道问题出现在哪里?请高手指教,谢谢!
...全文
1177 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
新生代码农NJ 2008-03-21
  • 打赏
  • 举报
回复
问题已经解决,谢谢各位!
cg_xs 2008-03-20
  • 打赏
  • 举报
回复
你用完整路径测试.或者取相对的完整路径.
新生代码农NJ 2008-03-19
  • 打赏
  • 举报
回复
文件是存在的,路径也是对的啊!
直接:

C/C++ codefile.Open(m_filename,CFile::modeRead ¦CFile::typeBinary);///这里有问题吗?

有问题吗?
按照这个出现的错误也是一样的!
菜牛 2008-03-19
  • 打赏
  • 举报
回复
文件必须存在,路径必须正确,
下面这句蛇足不用
char filename[20]; 
strcpy(filename,LPCTSTR(m_filename));//??????????把CString 赋值给char数组?
直接:
file.Open(m_filename,CFile::modeRead ¦CFile::typeBinary);///这里有问题吗? 
有问题吗?
Eleven 2008-03-19
  • 打赏
  • 举报
回复
CString mCS=_T("cxl");
char mch[20];
memcpy(mch,mCS,20);
ouyh12345 2008-03-19
  • 打赏
  • 举报
回复
直接使用CFile的构造函数来打开文件
CFile( LPCTSTR lpszFileName, UINT nOpenFlags );
ouyh12345 2008-03-19
  • 打赏
  • 举报
回复
strcpy(filename,LPCTSTR(m_filename));//??????????把CString 赋值给char数组?

strcpy(filename,m_filename.GetBuffer(m_filename.GetLength()));
m_filename.ReleaseBuffer();

1.csd
传绝对路径试试
新生代码农NJ 2008-03-19
  • 打赏
  • 举报
回复
Debug Assertion Failed!
Program:D:\c++程序\论文程序\ImagePro\Debug\ImagePro.exe
File:filecore.cpp
Line:258

For information on how your program can cause an assertion
failure,see the VC++documentation on asserts.

(Press Retry to debug the application)
上面是错误对话框里的内容
忽略之后就出现“没有找到一未命名文件”Messagebox框
yuucyf 2008-03-19
  • 打赏
  • 举报
回复
先用API SetCurrentDirectory()试试

比如你的文件在 "D:\temp\1.csd"
那你可以这样试试:

SetCurrentDirectory("D:\temp");
file.open("1.csd",..);
新生代码农NJ 2008-03-19
  • 打赏
  • 举报
回复
我直接把filename 换成文件名“1.csd”,也出现同样的错误。
难道真实路径出问题了?
cg_xs 2008-03-19
  • 打赏
  • 举报
回复
m_filename路径合法性,再看看路径访问权限,一步步跟进去,看到哪时错误
kugou123 2008-03-19
  • 打赏
  • 举报
回复
调试的时候,看看m_filename的值到底是什么。

16,472

社区成员

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

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

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