📄 subject_57549.htm
字号:
<p>
序号:57549 发表者:masonduan 发表日期:2003-10-26 18:47:08
<br>主题:如何使用CFile类?
<br>内容:如何使用CFile类将磁盘文件的内容读到预先分配的内存块中?使用完后有如何关闭文件?<BR><BR>我使用了如下代码,但是每次打开文件后就出现错误,请高手指正:<BR><BR>void CMainFrame::OnFileOpen() <BR>{<BR> CFileDialog fdlg(true);<BR><BR> if(fdlg.DoModal()==IDOK)<BR> {<BR> HANDLE hFile;<BR> hFile = CreateFile(fdlg.GetPathName<BR> GENERIC_READ, <BR> FILE_SHARE_READ,<BR> NULL,<BR> OPEN_EXISTING,<BR> FILE_ATTRIBUTE_NORMAL,<BR> NULL );<BR> if(!hFile){ AfxMessageBox("Can not open file!");return;}<BR><BR> CFile BMPFile;<BR> BITMAPFILEHEADER fHeader;<BR> <BR> BMPFile.Open(fdlg.GetPathName(),CFile::modeRead);<BR> BMPFile.Read(&fHeader, 54);//出错<BR> BMPFile.Close();//出错<BR> <BR>}
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:金枪鱼 回复日期:2003-10-26 19:09:46
<br>内容:你的内存块再哪里?<BR>给你几行代码供你参考:<BR><BR>BOOL CZhylPictureEx::Load(LPCTSTR szFileName)<BR>{<BR> ASSERT(szFileName);//调试时验证文件路径不空<BR> <BR> CFile file;//构造文件类对象<BR> HGLOBAL hGlobal=NULL;//定义全局内存句柄<BR> DWORD dwSize=0;//定义记录图形数据大小的变量<BR><BR> if (!file.Open(szFileName,<BR> CFile::modeRead | <BR> CFile::shareDenyWrite) )<BR> {//尝试共享读取方式打开文件<BR> TRACE(_T("打开图形文件\"%s\"失败\n"),szFileName);//调试时提示<BR> return FALSE;<BR> };<BR><BR> dwSize =(DWORD) file.GetLength();//根据文件大小设定图形数据大小<BR> //VC7中GetLength返回的是ULONGLONG类型(64位的无符号整数)<BR> //我们一般使用的DWORD是32位的无符号整数<BR> hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD,dwSize);<BR> if (!hGlobal)<BR> {<BR> TRACE(_T("内存分配失败!\n"));//调试时提示<BR> return FALSE;<BR> };<BR> <BR> char *pData = reinterpret_cast<char*>(GlobalLock(hGlobal));<BR> if (!pData)<BR> {<BR> TRACE(_T("内存锁定失败!\n"));//调试时提示<BR> GlobalFree(hGlobal);<BR> return FALSE;<BR> };<BR><BR> TRY<BR> {<BR> file.Read(pData,dwSize);<BR> }<BR> CATCH(CFileException, e); <BR> {<BR> TRACE(_T("读取图形文件\"%s\"的数据时失败!\n"),szFileName);//调试时提示<BR> GlobalFree(hGlobal);<BR> e->Delete();<BR> file.Close();<BR> return FALSE;<BR> }<BR> END_CATCH<BR> GlobalUnlock(hGlobal);//释放内存的锁定<BR> file.Close();<BR> //这样就将文件数据读入了hGlobal句柄指定的内存块中了,<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:晴天听雨 回复日期:2003-12-17 19:50:06
<br>内容:请问楼主,你的程序改通了吗?<BR>能不能把改好的程序贴出来看看<BR>我也奇怪呢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -