我写了一段读取文件到缓冲区,然后发送数据到浏览器显示的程序。但是图形文件在浏览器中显示不出来,文本文件却可以。是不是我读文件这段代码对读图形文件有问题。下面是我的代码:
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);}请各位大虾指教;
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);}请各位大虾指教;
解决方案 »
- 求VC6可用的开源xml操作库
- 为什么我picture control上面的图片不会变?
- 怪问题: 关于日历控件CMonthCalCtrl
- 请教BMP图象拉伸的原理、算法,谢谢!
- IO卡问题(730)急!!
- 关于计算指定文件夹下的文件总个数的问题
- CComboBox 的绑定与取值问题
- 那位大哥能提供英文分词的源代码(急需!!)!!
- 那里有DirectShow 的编程资料?
- 怎样让ToolsBar上的Button和菜单上的Item对应起来?
- 我怎样实现数据库中数据的同步?如,表1中有字段A、B、C、D,在表2中有C、D、E、F,我在表1中改变了C、D的值,怎样实现表2中的字段C、D值
- 请问谁有API函数的ebook???
如下代码:
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()是读取一个字符,只是这样我觉得太慢了,用上面的代码想快一点。
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);
}
}