新人求助,关于复制一个文件到另一个文件中的问题?
最近在学习小甲鱼老师以前的C语言学习视频,有一个关于图片合成器的问题,我想了一下午也没什么头绪,希望能得到名位前辈的帮助所谓图片合成器,就是将一个图片文件和一个zip文件,合成在一起,形成一个新的文件,当将新文件的扩展名改为:.jpg时,打开该文件将打开那那个图片,而将新文件的扩展名改为:.zip时,打开该文件又将打开那个zip压缩文件。
这就涉及到文件的复制。
问题就出现在这里!!
写一个普通的文件复制程序,如下:
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
void main()
{
char *file_name1 = (char*)calloc(30, sizeof(char));//目标文件的文件名
char *file_name2 = (char*)calloc(30, sizeof(char));//新建文件的文件名
char ch; //复制文件的中间变量
FILE *fp1 = NULL, *fp2 = NULL; //fp1为目标文件,fp2为新建文件
scanf_s("%s", file_name1, 30); //输入目标文件的文件名
fflush(stdin); //清空键盘缓冲区
scanf_s("%s", file_name2, 30); //新建文件的文件名
fflush(stdin); //清空键盘缓冲区
if ((fp1 = fopen(file_name1, "r")) == NULL) //以“读”方式打开目标文件,并判断打开是否出错
{
printf("error!");
exit(0);
}
if ((fp2 = fopen(file_name2, "w")) == NULL) //以“写”方式打开新建文件
{
printf("error!");
exit(0);
}
while (!feof(fp1)) //开始复制,以feof判断是否复制结束。
{
ch = fgetc(fp1);
fputc(ch, fp2);
}
if (feof(fp1)) //判断是否复制成功
{
printf("复制成功!结束程序!");
}
else
{
printf("error!!");
}
}
我可以用如上程序复制一个文本文档。
但当我如上程序尝试复制一个.jpg文件即图片时,它总是复制不全。
我尝试用文本文档打开新旧两个图片文件时发现,新的文件仅仅复制了旧图片文件的前几个字符,对比如下 :
请问这是.jpg文件的什么特殊性质,还是我有什么没有考虑到?
望各位前辈解答!
感谢各位! //if ((fp1 = fopen(file_name1, "r")) == NULL)
if ((fp1 = fopen(file_name1, "rb")) == NULL)
//if ((fp2 = fopen(file_name2, "w")) == NULL)
if ((fp2 = fopen(file_name2, "wb")) == NULL) void test_copy_image()
{
char *file_name1 = (char*)calloc(30, sizeof(char));//目标文件的文件名
char *file_name2 = (char*)calloc(30, sizeof(char));//新建文件的文件名
char ch; //复制文件的中间变量
FILE *fp1 = NULL, *fp2 = NULL; //fp1为目标文件,fp2为新建文件
printf("Input orgial image name:");
scanf("%s", file_name1); //输入目标文件的文件名
fflush(stdin); //清空键盘缓冲区
printf("Input want to save image name:");
scanf("%s", file_name2); //新建文件的文件名
fflush(stdin); //清空键盘缓冲区
if ((fp1 = fopen(file_name1, "r")) == NULL) //以“读”方式打开目标文件,并判断打开是否出错
{
printf("error!");
exit(0);
}
if ((fp2 = fopen(file_name2, "w")) == NULL) //以“写”方式打开新建文件
{
printf("error!");
exit(0);
}
while (!feof(fp1)) //开始复制,以feof判断是否复制结束。
{
ch = fgetc(fp1);
fputc(ch, fp2);
}
if (feof(fp1)) //判断是否复制成功
{
printf("Copy success, program end!\n");
}
else
{
printf("error!!");
}
fclose(fp1);
fclose(fp2);
}
直接调用这个函数,然后输入一个原始图片名字和保存图片的名字
测试是可以正常保存的。 人造人 发表于 2018-9-3 00:14
你的意思是:使用二进制的方式进行复制是吗?
我尝试过之后是可以的
但ASCII文件为什么不可以呢? weizhongyang 发表于 2018-9-3 17:08
直接调用这个函数,然后输入一个原始图片名字和保存图片的名字
测试是可以正常保存的。
我尝试过了,ASCII文件还是不行,不过二进制文件还是可以的,
是我的编译器的问题? 星球杯 发表于 2018-9-3 20:54
你的意思是:使用二进制的方式进行复制是吗?
我尝试过之后是可以的
什么不可以?
用代码说话
人造人 发表于 2018-9-3 22:53
什么不可以?
用代码说话
我说是可以的,您可能看错了。 星球杯 发表于 2018-9-4 12:30
我说是可以的,您可能看错了。
感谢您! 星球杯 发表于 2018-9-4 12:30
我说是可以的,您可能看错了。
页:
[1]