各位高手,好久没来提问了,给各位送分来了,请笑纳!!!!一个文件读写的问题:读BMP和TXT,然后生成新的文件格式,后缀名就随意啦,生成新的文件后,要能用程序再次打开,看到里面的BMP图片和文本信息。请问怎么实现???请详细说明!有代码更好!!!回帖操作者皆有分,解决问题者不少于50分,不够新开贴继续给!!!!呵呵.............各位高手也许不在乎分数,这只代表本人诚意感激。

解决方案 »

  1.   

    将Bmp文件读取进来,放进一个字符串数组bmpBuffer,将Txt也读进来,放进一个字符串数组txtBufferCreateFile新建一个文件,开头存放2个Buffer即将存放的位移和长度,假设bmpBuffer长度为1023,txtBuffer长度为200在文件开头几个地方记录下来,然后开始写读取的时候从指定的位移读取出对应长度的Buffer,分别写成2个CMemFile,然后读取显示么
      

  2.   

    一种简便的方法,就是直接把读入的文本,写到bmp数据的结尾处,读入时,计算bmp结尾处,再从结尾处读入文本.
    CFile file;
    if (!file.Open(strFileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
    {
    MessageBox(_T("不能写bmp文件! \n") + m_strBmpDesDir);
    return FALSE;
    }// 32位增强型真彩色位图
    file.Write(&bmfh, sizeof(BITMAPFILEHEADER));
    file.Write(&bmih, sizeof(BITMAPINFOHEADER));
    file.Write(pBmpData, bmpDataSize);
    // 写入文本
    file.Write(pStrBuf, strBufSize);
    file.Close();
      

  3.   

    如果想保密  可以把 txt 文件写入 bmp
    操作思想:
    1. bmp 复制+重命名  或者 读写到另一文件
    2. fopen "rb+"打开 新的bmp文件  把txt文件 写到bmp文件 从第 55字节开始的 地位
    3. 注意:代价是 bmp数据区 改变了   但效果肉眼感觉不到 且 bmp 只能保存本身大小 一半 的txt文件
      

  4.   

    这个我发过一个帖子 就是说文件合成的问题. 你在csdn上可以看到, 我的资源里有那个demo..帖子里有实现思路. 你也可以参考
    www.codeproject.com上的CFileTar, 
      

  5.   

    你的问题是什么?文件读写这个应该没有问题吧?可能有一个难点就是在内存数据中怎样装载bmp文件吧?
    给你一个函数参考一下HBITMAP GetBitmapFromBuffer(BYTE* pBmpData)
    {
    if ( pBmpData == NULL )
    {
    return NULL;
    } BITMAPFILEHEADER bmpHeader; //位图头结构
    DWORD dwHeaderLen = sizeof(BITMAPFILEHEADER);
    memcpy( &bmpHeader, pBmpData, dwHeaderLen ); if( bmpHeader.bfType != 0x4D42 ) // "BM"   // 设置位图文件头
    {
    ASSERT( FALSE );
    return NULL;
    }

    BITMAPINFOHEADER &bmpInfoHead = *(LPBITMAPINFOHEADER)(pBmpData+dwHeaderLen);  m_wCurBitCount = bmpInfoHead.biBitCount;
    m_wMaxBitCount = max( m_wCurBitCount, m_wMaxBitCount );

    BITMAPINFO &bmpInfo = *(LPBITMAPINFO)(pBmpData+dwHeaderLen);
    LPVOID pdibbit = pBmpData + ((BITMAPFILEHEADER*)pBmpData)->bfOffBits;

    CClientDC dc(this);
    HBITMAP hbitmap = ::CreateDIBitmap(dc.m_hDC, &bmpInfoHead, CBM_INIT, pdibbit, &bmpInfo, DIB_RGB_COLORS); if ( hbitmap == NULL )
    {
    ASSERT( FALSE );
    } return hbitmap;
    }
      

  6.   

    使用“序列化”方式实现,CArchieve类
      

  7.   

    Bitmap bmp = new Bitmap(讀取路徑);
            Rectangle roi = new Rectangle(0,0,bmp.Width,int.Parse(TextBox1.Text));
            PixelFormat format = bmp.PixelFormat;
            Bitmap cloneBitmap = bmp.Clone(roi, format);
            string[] str = Image.ImageUrl.Split('.');
            cloneBitmap.Save(保存路徑(str[0] + "1." + str[1]));
      

  8.   

    最简单的办法,分别读两个文件入内存
    然后filemapping里写入文件内容(设置格式),可以如上面3楼说的,长度加偏移
    再写入新文件就可以了
      

  9.   

    支持前面的回复 开头固定长度存储两个指针 分别指向BMP以及TXT数据的首部就好了
      

  10.   

    俺习惯于将所有数据都转为base64编码,然后写成文本格式。
      

  11.   

    以前没有读写过二进制文件,呵呵....也就读写TXT,ini文之类的........看来高手真的多多呀!!!!还有没有更好的方法......还有没有更加完整的代码......谢谢各位.
      

  12.   

    CFileTar 确实是个不错的东西.看了.谢谢 8 楼
      

  13.   

    按照文件系统的方法比较好。格式如下:
    文件1数据的偏移量  文件1的基本信息
    文件2数据的偏移量  文件2的基本信息
    文件3数据的偏移量  文件3的基本信息
    .......
    文件1实际数据
    文件2实际数据
    文件3实际数据
    .......
    说明,文件的基本信息至少要能表达文件的数据大小,比如BMP的width、height、colordepth(位深)都是必须的,而txt文件则只需知道大小就行了。