目录
一.内容实现
#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()
格式化写函数