在使用CFile类的Write函数的时候有一个问题(300分)
在使用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;
}