219 copy file

1.copy file

#include <stdio.h>
#include <stdlib.h>
#define SIZE 200
int main(void) {
	const char* file_name = "E:\\桌面\\file.txt";
	const char* copy_name = "E:\\桌面\\copy.txt";
	const char* fuck_name = "E:\\桌面\\fuck.txt";
	FILE* file_ptr, * copy_ptr, * fuck_ptr;
	errno_t ef = fopen_s(&file_ptr, file_name, "rb");
	if (ef != 0 || file_ptr == NULL) {
		perror("file opening failed!");
		return EXIT_FAILURE;
	}
	errno_t ec = fopen_s(&copy_ptr, copy_name, "wb");
	if (ec != 0 || copy_ptr == NULL) {
		perror("copy opening failed!");
		return EXIT_FAILURE;
	}
	
	errno_t ek = fopen_s(&fuck_ptr, fuck_name, "wb");
	if (ek != 0 || fuck_ptr == NULL) {
		perror("fuck opening failed!");
		return EXIT_FAILURE;
	}
	size_t read_bytes;
	char buffer[SIZE];
	
	while( (read_bytes = fread(buffer, 1, sizeof(buffer), file_ptr)) > 0) {
		fwrite(buffer, 1, read_bytes, copy_ptr);
		fwrite(buffer, 1, read_bytes, fuck_ptr);
	}
	puts("copy successfully!");
	fclose(file_ptr);
	fclose(copy_ptr);
	fclose(fuck_ptr);

	return 0;
}

2.output

copy successfully!

file:
在这里插入图片描述

3.易错写法

3.1 read_bytes没有一直更新:

while( read_bytes > 0) {
	fwrite(buffer, 1, read_bytes, copy_ptr);
	fwrite(buffer, 1, read_bytes, fuck_ptr);
}

3.2 没有按顺序关闭文件流:

_fcloseall();

另外,fclose 单独关闭,便于后续错误排查

4.两种写法的不同之处

实际上是2种适用场景:
4.1 二进制文件处理:(字节为单位)

"rb"
"wb"

可以表示任何类型的数据
数据按原始的字节处理,不进行任何转换

while((read_bytes = fread(buffer, 1, sizeof(buffer), file_ptr)) > 0) {
	fwrite(buffer, 1, read_bytes, copy_ptr);
	fwrite(buffer, 1, read_bytes, fuck_ptr);
}

4.2 文本文件处理:(字符为基础)
会处理字符编码和换行符,文件结尾添加 \0 表示字符串结束

while((read_bytes = fread(buffer, 1, sizeof(buffer) - 1, file_ptr)) > 0)  {
	buffer[read_bytes] = '\0';
	fwrite(buffer, 1, read_bytes, copy_ptr);
	fwrite(buffer, 1, read_bytes, fuck_ptr);
}

5.出现的错误类型:

打开的路径(fopen_s 的第2个参数)写错会出现:

Permission denied
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值