|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近在学习小甲鱼老师以前的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)
复制代码
|
|