c语言实现图片复制

sqsy109 2016-03-19 10:21:56
#include<stdio.h>
#include<stdlib.h>

int main(){
FILE *fp;
FILE *fp1;

char str[256];
gets(str);
if((fp=fopen(str,"rb+")) == NULL){
printf("ERROR");
getch();
exit(1);
}

if((fp1=fopen("d:\\cs\\cs.jpg","wt++")) ==NULL){
printf("error1");
getch();
exit(1);
}
fseek(fp,0L,SEEK_END);
long length;
long n,cpyfinish;
length = ftell(fp);
rewind(fp);

char pBuffer[1]={0};
unsigned char buff;


//while (!feof(fp))
while(length>0)
{
n = fread(pBuffer, 1, 1, fp);
cpyfinish =fwrite(pBuffer, 1, n, fp1);
length-=cpyfinish;
}


if(ferror(fp)){
puts("读取出错");
}else{
puts("读取成功");
}

fclose(fp);
fclose(fp1);

getch();
return 0;
}

为什么复制后的图片会不一样???

...全文
703 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-03-21
  • 打赏
  • 举报
回复
不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
mxway 2016-03-20
  • 打赏
  • 举报
回复
fp1=fopen("d:\\cs\\cs.jpg","wt++")
改成
fp1=fopen("d:\\cs\\cs.jpg","wb++")
试下。以前也遇到过类似情况,对于图片的写入好像要用二进制方式写。
sqsy109 2016-03-19
  • 打赏
  • 举报
回复
我的电脑是win7 32位,难道是系统的问题吗?
醉花阴柳 2016-03-19
  • 打赏
  • 举报
回复


代码基本没做修改

#include<stdio.h>
#include<stdlib.h>

int main(){
FILE *fp;
FILE *fp1;

char str[256];
scanf("%s",str);
if((fp=fopen(str,"rb+")) == NULL)
{
printf("ERROR");
exit(1);
}

if((fp1=fopen("2.jpg","wt++")) ==NULL)
{
printf("error1");
exit(1);
}
fseek(fp,0L,SEEK_END);
long length;
long n,cpyfinish;
length = ftell(fp);
rewind(fp);

char pBuffer[1]={0};
// unsigned char buff;


//while (!feof(fp))
while(length>0)
{
n = fread(pBuffer, 1, 1, fp);
cpyfinish =fwrite(pBuffer, 1, n, fp1);
length-=cpyfinish;
}


if(ferror(fp))
puts("读取出错");
else
puts("读取成功");

fclose(fp);
fclose(fp1);

return 0;
}

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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