如何打开c++中图片文件?????

xuxian02092213 2008-04-19 02:02:08
我想用socket传送图片文件,网上的也些高手说将图片以二进制方式打开,
下面的代码请各位高手看下那里出现了错误,如果下面的不正确,那发送数据出去
对方收到的也肯定是错的
fstream rfile;
fstream wfile;
char databuf[1024];
rfile.open("read.jpg",ios::out ¦ ios::in ¦ ios::binary);
wfile.open ("wfile.jpg",ios::out ¦ ios::in ¦ ios::binary);

while(rfile.is_open())
{
memset(databuf,0,sizeof(databuf));
rfile.read(databuf,sizeof(databuf)-1);
wfile.write(databuf,strlen(databuf));
if(rfile.eof())
break;
}
rfile.close();
wfile.close();

如果wfile的文件内容同read内容一样的话就表明将databuf发送出去,别人接受会成功
但是我这样子是不成功的呀,wfile的内容是错误的呀。上面的代码该怎么改呢,还请大侠不吝赐教。
...全文
411 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjy1204 2008-04-19
  • 打赏
  • 举报
回复
这问题在你另一个帖子里已经回复了~
Inhibitory 2008-04-19
  • 打赏
  • 举报
回复
while(!rfile.eof())
{
memset(databuf,0,sizeof(databuf));
rfile.read(databuf,sizeof(databuf)-1);
wfile.write(databuf,strlen(databuf)); // 怎么能用求字符串长度来求二进制的长度呢? 这里是错的.因为在读取的时候有可能中间就有值为0的数.
}


推荐用fread来读取, 因为fread会返回读取到的数量:
#include <stdio.h>
int fread( void *buffer, size_t size, size_t num, FILE *stream );

函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量...

这种方式就会保证你能够正确的写入读到的数据, 而不会多出来, 也不会少出来.

使用feof()或ferror()判断到底发生哪个错误.

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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