|
1鱼币
我用下面这个程序把图片和一个rar的文本加到一起,图片上4的大小也为1和2 的和,可是我把4的名字改为4.rar, 并不会变成rar的形式
我用的是windows8.1的系统
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *f_file, *f_pic, *f_finish;
char ch, pic_name[20], file_name[20], finish_name[20];
printf("请输入要合成的图片、文件名称: \n");
printf("图片: ");
scanf("%s", pic_name);
printf("文件: ");
scanf("%s", file_name);
printf("结果: ");
scanf("%s", finish_name);
if( !(f_pic = fopen(pic_name, "rb")))
{
printf("Cannot open the ficture %s!\n", pic_name);
exit(0); // 终止程序
}
if( !(f_file = fopen(file_name, "rb")))
{
printf("Cannot open the file %s!\n", file_name);
exit(0); // 终止程序
}
if( !(f_finish = fopen(finish_name, "wb")))
{
printf("Cannot open the file %s!\n", finish_name);
exit(0); // 终止程序
}
while( !feof(f_pic) )
{
ch = fgetc(f_pic);
fputc(ch, f_finish);
}
fclose(f_pic);
while( !feof(f_file) )
{
ch = fgetc(f_file);
fputc(ch, f_finish);
}
fclose(f_file);
fclose(f_finish);
}
本帖最后由 ryxcaixia 于 2015-12-24 13:06 编辑
少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构
以.bmp图片文件为例
最开始的14字节是tagBITMAPFILEHEADER结构体 并且每个字段都要有自己对应的值
接下来的40个字节是tagBITMAPINFOHEADER结构体 同理 每个字段也要对应赋值
依次类推 所以各个图片查看软件 去读取这些文件 然后解析各个字段的数据解析 之后才能显示出来
这些结构体就算完全正确 但是在文件中的位置顺序颠倒一个都不行 这都是有严格的顺序的
楼主 你这样利用c文件操作 把两个文件完全叠加在一起 没问题 并且加之后的大小是两个文件的总和也是对的
但这样不考虑文件结构咣咣像丢垃圾一样完全把各不相干的东西叠加在一起 你让.rar的文件打开工具怎么解析? 固定的位置找不到有效信息 当然出错
|
-
最佳答案
查看完整内容
少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构
以.bmp图片文件为例
最开始的14字节是tagBITMAPFILEHEADER结构体 并且每个字段都要有自己对应的值
接下来的40个字节是tagBITMAPINFOHEADER结构体 同理 每个字段也要对应赋值
依次类推 所以各个图片查看软件 去读取这些文件 然后解析各个字段的数据解析 之后才能显示出来
这些结构体就算完全正确 但是在文件中的位置顺序颠倒一个都不行 这都是有严格的 ...
|