鱼C论坛

 找回密码
 立即注册
查看: 2948|回复: 6

[已解决]图片文件转换器

[复制链接]
发表于 2015-12-24 11:47:51 | 显示全部楼层 |阅读模式
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);
}

最佳答案
2015-12-24 11:47:52
本帖最后由 ryxcaixia 于 2015-12-24 13:06 编辑

少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构
以.bmp图片文件为例
最开始的14字节是tagBITMAPFILEHEADER结构体 并且每个字段都要有自己对应的值
接下来的40个字节是tagBITMAPINFOHEADER结构体 同理 每个字段也要对应赋值
依次类推 所以各个图片查看软件 去读取这些文件 然后解析各个字段的数据解析 之后才能显示出来
这些结构体就算完全正确 但是在文件中的位置顺序颠倒一个都不行 这都是有严格的顺序的

楼主 你这样利用c文件操作 把两个文件完全叠加在一起 没问题 并且加之后的大小是两个文件的总和也是对的
但这样不考虑文件结构咣咣像丢垃圾一样完全把各不相干的东西叠加在一起 你让.rar的文件打开工具怎么解析? 固定的位置找不到有效信息 当然出错
QQ图片20151224114508.png

最佳答案

查看完整内容

少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构 以.bmp图片文件为例 最开始的14字节是tagBITMAPFILEHEADER结构体 并且每个字段都要有自己对应的值 接下来的40个字节是tagBITMAPINFOHEADER结构体 同理 每个字段也要对应赋值 依次类推 所以各个图片查看软件 去读取这些文件 然后解析各个字段的数据解析 之后才能显示出来 这些结构体就算完全正确 但是在文件中的位置顺序颠倒一个都不行 这都是有严格的 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-24 11:47:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ryxcaixia 于 2015-12-24 13:06 编辑

少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构
以.bmp图片文件为例
最开始的14字节是tagBITMAPFILEHEADER结构体 并且每个字段都要有自己对应的值
接下来的40个字节是tagBITMAPINFOHEADER结构体 同理 每个字段也要对应赋值
依次类推 所以各个图片查看软件 去读取这些文件 然后解析各个字段的数据解析 之后才能显示出来
这些结构体就算完全正确 但是在文件中的位置顺序颠倒一个都不行 这都是有严格的顺序的

楼主 你这样利用c文件操作 把两个文件完全叠加在一起 没问题 并且加之后的大小是两个文件的总和也是对的
但这样不考虑文件结构咣咣像丢垃圾一样完全把各不相干的东西叠加在一起 你让.rar的文件打开工具怎么解析? 固定的位置找不到有效信息 当然出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-24 20:23:29 | 显示全部楼层
ryxcaixia 发表于 2015-12-24 13:05
少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构
以.bmp图片文件为例
最开始的1 ...

但是小甲鱼在视频里面就是这样做的啊,但是他的可以打开
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-24 20:29:05 | 显示全部楼层
ryxcaixia 发表于 2015-12-24 13:05
少年 在windows里利用后缀名来区分文件 是因为每个文件都有自己的文件结构
以.bmp图片文件为例
最开始的1 ...

我还有一个疑问,小甲鱼直接把1.jpg 改为1.rar 就变成了压缩文件的形式,可是我的不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-27 12:43:50 | 显示全部楼层
nightkk 发表于 2015-12-24 20:29
我还有一个疑问,小甲鱼直接把1.jpg 改为1.rar 就变成了压缩文件的形式,可是我的不行

你确定你改的是后缀?而不是文件名……。它要求改后缀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-27 12:44:59 | 显示全部楼层
nightkk 发表于 2015-12-24 20:29
我还有一个疑问,小甲鱼直接把1.jpg 改为1.rar 就变成了压缩文件的形式,可是我的不行

你把后缀名一起截图出来,要是改了不行,可以用属性看看是不是rar格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-27 16:00:52 | 显示全部楼层
你在改名字之前不要  隐藏已知文件类型的扩展名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 16:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表