C语言:使用fwrite和fread实现一个音乐或者视频文件的拷贝

目录

一.内容实现 

二.文件操作

三.常用函数


一.内容实现 

#define  _CRT_SECURE_NO_WARNINGS 1

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

#define  SIZE 1024 * 4 //每次读写4k数据

void menu()
{
	printf("================================\n");
	printf("1 拷贝文件\n");
	printf("2 清屏\n");
	printf("3 退出\n");
	printf("================================\n");
}

void myCopy()
{
	char rPath[256]; //源文件
	char wPath[256]; //目的文件
	FILE* rFp = NULL;
	FILE* wFp = NULL;
	char buf[SIZE] = { 0 };
	int n = 0;

	printf("请输入源文件:");
	scanf("%s", rPath);

	printf("请输入目的文件:");
	scanf("%s", wPath);

	if (strcmp(rPath, wPath) == 0)
	{
		printf("源文件和目的文件不能相同\n");
		return;
	}

	//只读方式打开源文件
	rFp = fopen(rPath, "rb");
	if (rFp == NULL)
	{
		perror("fopen rPath");
		return;
	}

	//只写方式打开目的文件
	wFp = fopen(wPath, "wb");
	if (wFp == NULL)
	{
		fclose(rFp);
		perror("fopen wFp");
		return;
	}

	do
	{
		n = 0;
		//读多少,写多少
		n = fread(buf, sizeof(char), SIZE, rFp);
		printf("拷贝:%d\n", n);
		fwrite(buf, sizeof(char), n, wFp);

	} while (n > 0);
	printf("拷贝完成\n\n");

	fclose(rFp);
	fclose(wFp);
}

int main()
{
	int cmd;

	while (1)
	{
		menu();
		printf("cmd: ");
		scanf("%d", &cmd);

		switch (cmd)
		{
		case 1:
			myCopy();
			break;
		case 2:
			system("cls");//清屏
			break;
		default:
			exit(0);
		}
	}
	return 0;
}

实现如下

此实现可以正确处理任意类型的二进制文件,包括:

  • 音频文件(MP3/WAV/FLAC)

  • 视频文件(MP4/AVI/MKV)

  • 镜像文件(ISO/IMG)

  • 压缩包(ZIP/RAR)

  • 可执行文件(EXE/SO/DLL)

文件大小仅受操作系统和文件系统限制,通过分块读写的方式保证了内存使用的可控性。

二.文件操作

“wb”——只写打开或建一个二进制文件,只允许写数据(会覆 盖之前数据) 

“ab”——追加打开一个二进制文件,并在文件尾部追加数据 

 “rt+”——读写打开或建立一个文本文件,充读读写

 “wt+”————读写打开或建立一个文本文件,允许读写

 “at+”——读写打开一个文本文件,允许读,或在文件未追加数据

 “rb+”——读写打开一个二进制文件,允许读和写

 “wb+” ——读写打开或建立一个二进制文件,允许读和

三.常用函数

  • 打开fopen(文件名.c_str, fopen 参数)
  • 结束时关闭fclose(fp);
  • fgets()字符串
  • fputs ()写字符串
  • freed() 读数据块//二进制
  • fwrite()写数据块//二进制
  • fscanf()格式化读写函数
  • fprintf()格式化写函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值