美文网首页
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