在使用CFile类的Write函数的时候有一个问题(300分)

hzsagile 2002-03-28 03:00:28
在使用CFile类的Write函数的时候有一个问题,如果要写的buffer太大的话会导致一个文件写不完整的错误,比如写一个大型的BMP文件(148M),写的过程中会出现'Windows出现一个不明错误'或'找不到文件'等错误,但是文件能够生成,也能够打开,只是图像只有开头一部分是正常的,不知道是什么原因.听说建立文件映射可以解决这个问题,不知道对不对.如果可以如何建立及怎样使用呢?我的问题很急,请高手不吝赐教,万分感谢!如能解决300分以报(提出有价值建议者另外给分),分不够我会再开三帖!我的源程序段如下:
BOOL CDIB::SaveBMP(CString& csFileName)
{
DWORD i=0, nSizeBitmap;
BITMAPFILEHEADER bFile;
CFile file;
if(!file.Open(csFileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
{
return FALSE;
}
::ZeroMemory(&bFile,sizeof(bFile));
memcpy((void *)&bFile.bfType,"BM",2);
bFile.bfSize = GetDIBSize() + sizeof(bFile);
bFile.bfOffBits = sizeof(BITMAPINFOHEADER) + GetPaletteSize()*sizeof(RGBQUAD) + sizeof(BITMAPFILEHEADER);

file.WriteHuge(&bFile,sizeof(bFile));
//file.WriteHuge(m_pVoid,GetDIBSize());
nSizeBitmap = GetDIBSize();
const void *lpfb= m_pVoid;
while(nSizeBitmap-i>0x4000)
{
//每次写入0x4000字节
file.Write(lpfb,0x4000);
//如何移动lpfb的指针呢,使其每次偏移0x4000字节?
//如果指针越界如何处理?
//写大文件需要用到文件映射么?如何解决?(300分)
i+=0x4000;
file.SeekToEnd();
//lpdestbits+=0x4000;
}
//写入余下的字节
file.Write(m_pVoid, nSizeBitmap-i);
file.Close();
return TRUE;

}
...全文
83 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzsagile 2002-03-28
  • 打赏
  • 举报
回复
先散一散分,希望大家继续讨论
hzsagile 2002-03-28
  • 打赏
  • 举报
回复
还有2个G
我不是大明 2002-03-28
  • 打赏
  • 举报
回复
是不是你的DISK空间不够的?
MeKing 2002-03-28
  • 打赏
  • 举报
回复
用文件映射方式可以解决,具体查看<<WINDOWS核心编程技术>>。
hzsagile 2002-03-28
  • 打赏
  • 举报
回复
大文件还是通不过,出现非法操作
hzsagile 2002-03-28
  • 打赏
  • 举报
回复
正在测试大文件,如果通过就散分
kaden 2002-03-28
  • 打赏
  • 举报
回复
将lpfb换成char*
hzsagile 2002-03-28
  • 打赏
  • 举报
回复
lpfb+=0x4000 会出现语法错误,WirteHuge和Write效果相同
kaden 2002-03-28
  • 打赏
  • 举报
回复
// file.SeekToEnd();
kaden 2002-03-28
  • 打赏
  • 举报
回复
WriteHuge被write取代了。
luxbill 2002-03-28
  • 打赏
  • 举报
回复
用WriteHuge
kaden 2002-03-28
  • 打赏
  • 举报
回复
void* lpfb; or char* lpfb=(char*)m_pVoid;
file.Write(lpfb,0x4000);
//如何移动lpfb的指针呢,使其每次偏移0x4000字节?
lpfb+=0x4000;!!!!!!!!!

//如果指针越界如何处理?
指针是否越界自己判断,否则用exception
//写大文件需要用到文件映射么?如何解决?(300分)
没有必要,文件系统本身有缓冲
pqxx 2002-03-28
  • 打赏
  • 举报
回复
关注

16,551

社区成员

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

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

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