我写了一段读取文件到缓冲区,然后发送数据到浏览器显示的程序。但是图形文件在浏览器中显示不出来,文本文件却可以。是不是我读文件这段代码对读图形文件有问题。下面是我的代码:
void readFile(CString &content, const CString &filename)
{
    char tmp[500];
    unsigned int nbytes = 500, bytesread;
FILE *in;
if ((in = fopen((LPCTSTR)filename, "rb")) == NULL)
{
throw EXIOError(filename);
}
while (!feof(in))
{       
        bytesread=fread(&tmp[0],sizeof(char),nbytes,in);
        tmp[bytesread]='\0';
    content+=tmp;
}
fclose(in);}请各位大虾指教;

解决方案 »

  1.   

    用CHAR当然有问题,图形文件有固定的格式,怎么这么读呢。好象应当用专门的函数的。
      

  2.   

    这得看你的文件是什么格式了,BMP有现成的函数,也可以一点点读然后再处理。
      

  3.   

    但是我一个字节,一个字节读的时候确实好的
       如下代码:
           
    void readFile(CString &content, const CString &filename)
    {
             FILE *in;
    if ((in = fopen((LPCTSTR)filename, "rb")) == NULL)
    {
    throw EXIOError(filename);
    }
    while (!feof(in))
    {  
                 content.Insert(content.getLenght(),fgetc(in));     
    }
    fclose(in);
    }这段代码却是好的,fgetc()是读取一个字符,只是这样我觉得太慢了,用上面的代码想快一点。
      

  4.   

    typedef struct{                   //文件头
            short int bfType;
            int bfSize;
            short int bfReserved1;
            short int bfReserved2;
            int bfoffBits;
            } FILEHEADER;
    typedef struct {                 //信息头
            long biSize;
            long biWidth;
            long biHeight;
            short int biPlanes;
            short int biBitCount;
            long biCompress;
            long biSizeImage;
            long biXPelsPerMeter;
            long biYPelsPerMeter;
            long biClrUsed;
            long biClrImportant;
            }INFOHEADER;
    typedef struct {                  //调色板
            unsigned char rgbBlue;
            unsigned char rgbGreen;
            unsigned char rgbRed;
            unsigned char rgbReserved;
            }rgbquad;
    typedef struct {                //存灰度值
            int m;
            int n;
            char huidu;
            bool flag;
            }huiduzhi;private:
            FILEHEADER fileheader1;
            INFOHEADER infoheader1;
            rgbquad rgbquad[256];
            huiduzhi huiduzhi1[1000][1000];Unit.cppvoid __fastcall TForm1::Open1Click(TObject *Sender)
    {
      String filename;
      FILE *fp;
      int x,y;
      BYTE *hang;  OpenDialog1->DefaultExt="BMP";
      OpenDialog1->FileName="*.bmp";
      OpenDialog1->Execute();
      filename=OpenDialog1->FileName;
      CurrentFile=OpenDialog1->FileName;
      Form3->Caption=CurrentFile;
        if((fp=fopen(filename.c_str(),"rb"))==NULL)
          {
          ShowMessage("不能打开文件");
          fclose(fp);
          }
        else
            {
            int j,k;
            j=sizeof(INFOHEADER);
            k=sizeof(rgbquad);        fseek(fp,0L,0);
            fread(&fileheader1.bfType,2,1,fp);        fseek(fp,2L,0);
            fread(&fileheader1.bfSize,4,1,fp);        fseek(fp,6L,0);
            fread(&fileheader1.bfReserved1,2,1,fp);        fseek(fp,8L,0);
            fread(&fileheader1.bfReserved2,2,1,fp);        fseek(fp,10L,0);
            fread(&fileheader1.bfoffBits,4,1,fp);        fread(&infoheader1,j,1,fp);
            
            fread(rgbquad,k*256,1,fp);        Bitmap = new Graphics::TBitmap();
            Bitmap->Width = infoheader1.biWidth;
            Bitmap->Height = infoheader1.biHeight;
            Image1->Picture->Graphic = Bitmap;
            Form1->Height =(Bitmap->Height)+27;
            Form1->Width=(Bitmap->Width)+8;
            
            hang=new BYTE [infoheader1.biWidth];
            if(hang==NULL)
              {
              ShowMessage("开辟空间不成功!");
              }
            fseek(fp,fileheader1.bfoffBits,0);
            for(y=infoheader1.biHeight;y>=0;y--)
                {             fread(hang,1,infoheader1.biWidth,fp);
                 for(x=0;x<=infoheader1.biWidth;x++)
                    {
                    huiduzhi1[x][y].m=x;
                    huiduzhi1[x][y].n=y;
                    huiduzhi1[x][y].huidu=hang[x];
                    huiduzhi1[x][y].flag=false;
                    Image1->Canvas->Pixels[x][y]=TColor(RGB(rgbquad[hang[x]].rgbRed,rgbquad[hang[x]].rgbGreen,rgbquad[hang[x]].rgbBlue));
                    }
            fclose(fp);
            free(hang);           
           }
    }