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

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

	FILE *fp1 = fopen("库蒂尼奥.jpg", "rb");
	FILE *fp2 = fopen("库蒂尼奥副本.jpg", "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);                      //关闭文件

我们这里就使用c语言实现了一个简单的图片"复制粘贴"过程。
打开文件:
复制(需要以读取的方式打开二进制文件)
粘贴(需要以写入的方式打开或者创建一个二进制文件)
这里我们使用了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.

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

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值