文件操作-C语言实现图片、压缩包等文件的“复制粘贴“过程

大部分参考自: 文件操作-C语言实现图片的“复制粘贴“过程_一个图像一部分复制到另一个图像中c语言_philippe coutinho的博客-CSDN博客

#define _CRT_SECURE_NO_WARNINGS的作用参考: https://mp.csdn.net/mp_blog/creation/editor/new/129414996

首先我们需要知道图片是一个二进制文件,其次我们就需要通过文件操作的相关接口,对其进行二进制文件的复制。

下面看代码:

#define _CRT_SECURE_NO_WARNINGS

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


int main(void)
{
    FILE* fp1 = fopen("D:\\test.jpg", "rb");
    FILE* fp2 = fopen("D:\\test2.jpg", "wb");
    // FILE* fp1 = fopen("D:\\test.rar", "rb");
    // FILE* fp2 = fopen("D:\\test2.rar", "wb");
    if (fp1 == NULL) {
        perror("fopen");
        return 1;
    }
    if (fp2 == NULL) {
        perror("fopen");
        return 2;
    }
    fseek(fp1, 0, SEEK_END);   //将指针对二进制文件(库蒂尼奥.jpg)的读取位置放到末端
    int i = ftell(fp1);          //得到起始偏移量,这里也就是文件大小   
    rewind(fp1);               //将指针对二进制文件(库蒂尼奥.jpg)的读取位置恢复到起始位置
    char* p = (char*)malloc(i);       //申请与原图片相同大小的动态内存空间
    fread(p, 1, i, fp1);              //复制        
    fwrite(p, 1, i, fp2);             //粘贴
    fclose(fp2);
    fclose(fp1);                      //关闭文件

	return 0;
}

我们这里就使用c语言实现了一个简单的图片"复制粘贴"过程。(rar等文件类推实现"复制粘贴"过程

打开文件:

复制(需要以读取的方式打开二进制文件)

粘贴(需要以写入的方式打开或者创建一个二进制文件)

这里我们使用了fseek,ftell,rewind,fread,fwrite等对文件操作的接口,关于文件的打开与关闭在这里不多说了,我们重点说一说上边所说的对文件属性或者内容进行操作的接口。

fread:

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

通过该接口的格式就可以知道,fread是从一个FILE * strem的二进制文件中读取size*count字节数,存入void *ptr这个缓冲区。

fwrite:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

和fread相反,fread是从一个void ptr这个缓冲区中读取sizecount字节数,存入FILE * strem这个二进制文件。

fread和fwrite都是对二进制文件的内容进行操作

下面介绍对文件属性进行操作的接口

ftell:

long int ftell ( FILE * stream );

传出文件指针变量,返回文件指针相对于起始位置的偏移量

举个例子:

这里我们从一个文本文件内容为“1234”字符串进行对ftell应用,得到不断读取一个字符的偏移量对比,并且这里我们简单提一下EOF是读取字符结束,它等于-1.并且这里我们也没有介绍fgetc(从对应文件中得到一个字符)这些接口,大家可以自己了解了解。

fseek:

int fseek ( FILE * stream, long int offset, int origin );根据文件指针的偏移量定位文件指针

举个例子:

rewind:

void rewind ( FILE * stream );

让文件指针的位置回到文件的起始位置

跟与刚才那个例子,改变一下,如图:

这样就回到了,最初的偏移位置,也就是0.

我们本次通过一个应用(图片的复制粘贴),去了解了关于部分对文件操作的接口,关于文件操作的接口有很多,这里我只介绍了一部分,如果读者们感兴趣,可以自行查找了解。

压缩包等文件的复制粘贴过程与本文叙述相同。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值