美文网首页
C++ 文件的拷贝

C++ 文件的拷贝

作者: 红鲤鱼与绿鲤鱼与驴与鱼 | 来源:发表于2023-08-28 10:45 被阅读0次
/**
 文件的复制
 */
#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: 拷贝文件的指针变量

相关文章

网友评论

      本文标题:C++ 文件的拷贝

      本文链接:https://www.haomeiwen.com/subject/gwcwmdtx.html