/**
文件的复制
*/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(){
string filePath = "/Users/aaa/Documents/C++File/a.jpg";
string copyFilePath = "/Users/aaa/Documents/C++File/a_copy.jpg";
FILE* file = fopen(filePath.data(),"rb");
if(!file){
printf("文件不存在:%s\n",filePath.data());
exit(0);
}
FILE* fileCopy = fopen(copyFilePath.data(), "wb");
//方式一:单个字节拷贝,文本和二进制文件都可以拷贝(但是效率低)
// int buff = 0;
// while(buff!=-1) {
// buff = fgetc(file);
// fputc(buff,fileCopy);
// }
//方式二:这种方式拷贝文本没有问题,拷贝二进制文件会出现问题(目前只测试了图片的拷贝)
// char buff[1024];
// while (fgets(buff, 1024, file)) {
// fputs(buff, fileCopy);
// }
//方式三:可以拷贝文本或者二进制文件(指图片、音视频文件)
int buff[1024];
int len;
while ((len = fread(buff, sizeof(int), sizeof(buff)/sizeof(int) , file)) != 0) {
fwrite(buff, sizeof(int) , len, fileCopy);
}
printf("拷贝完成\n");
fclose(file);
fclose(fileCopy);
return 0;
}
方式一 : 使用 fgetc() 和 fputc() 函数
这个两个函数都是单个字节读取和写入,虽然可以拷贝 文本文件 和 二进制文件(指音视频和图片文件), 但是效率会比较慢
方式二: 使用 fgets() 与 fputs() 函数
这种方式只能拷贝文本文件,不能拷贝图片音视频文件
方式三: 使用 fread() 和 fwrite() 函数
使用这两个函数都可以复制,没有文件类型的限制
-
fread() 函数:
参数1: 容器/缓存区
参数2:每次偏移多少个字节
参数3: 容器/缓存区 的大小
参数4: 需要读取的 文件指针变量 -
fwrite() 函数
参数1: 容器/缓存区 里面存放着读取的内容
参数2: 偏移量,和读取的时候保持一致
参数3: 读取时的长度
参数4: 拷贝文件的指针变量
网友评论