/**
文件的復(fù)制
*/
#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");
//方式一:單個字節(jié)拷貝,文本和二進(jìn)制文件都可以拷貝(但是效率低)
// int buff = 0;
// while(buff!=-1) {
// buff = fgetc(file);
// fputc(buff,fileCopy);
// }
//方式二:這種方式拷貝文本沒有問題,拷貝二進(jìn)制文件會出現(xiàn)問題(目前只測試了圖片的拷貝)
// char buff[1024];
// while (fgets(buff, 1024, file)) {
// fputs(buff, fileCopy);
// }
//方式三:可以拷貝文本或者二進(jìn)制文件(指圖片迹蛤、音視頻文件)
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() 函數(shù)
這個兩個函數(shù)都是單個字節(jié)讀取和寫入,雖然可以拷貝 文本文件 和 二進(jìn)制文件(指音視頻和圖片文件), 但是效率會比較慢
方式二: 使用 fgets() 與 fputs() 函數(shù)
這種方式只能拷貝文本文件,不能拷貝圖片音視頻文件
方式三: 使用 fread() 和 fwrite() 函數(shù)
使用這兩個函數(shù)都可以復(fù)制,沒有文件類型的限制
fread() 函數(shù):
參數(shù)1: 容器/緩存區(qū)
參數(shù)2:每次偏移多少個字節(jié)
參數(shù)3: 容器/緩存區(qū) 的大小
參數(shù)4: 需要讀取的 文件指針變量fwrite() 函數(shù)
參數(shù)1: 容器/緩存區(qū) 里面存放著讀取的內(nèi)容
參數(shù)2: 偏移量,和讀取的時候保持一致
參數(shù)3: 讀取時的長度
參數(shù)4: 拷貝文件的指針變量