广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++详解如何实现文件备份
  • 338
分享到

C/C++详解如何实现文件备份

2024-04-02 19:04:59 338人浏览 薄情痞子
摘要

目录一、C语言库的实现方法:二、系统调用函数:编写C程序,模拟实现linux文件系统的简单I/O流操作:备份文件,将源文件source.dat备份为target.dat文件。要求:

编写C程序,模拟实现linux文件系统的简单I/O流操作:备份文件,将源文件source.dat备份为target.dat文件。要求:

(1)使用C库函数实现文件备份

(2)使用系统调用函数实现文件备份

 这个实验的步骤就是: 双击打开需要备份的文件, 然后选择全部并且复制. 接着建立并且打开目的文件, 粘贴即可. 简单好抄.

 上面是题外话… 接下来我们进入正题 = > C => {C} =>C 语言中包含了能够进行文件备份的一系列内置函数, 例如: f o p e n ( ) , f c l o s e ( ) , f r e a d ( ) , f w r i t e ( ) , f s e e k ( ) fopen(), fclose(), fread(), fwrite(), fseek() fopen(),fclose(),fread(),fwrite(),fseek() 等. 正让我们进行文件拷贝(文件中的内容复制)变得十分的容易. 但是在系统调用下就并不这么简单了(虽然基本语法一致, 但是语法难记).

一、C语言库的实现方法:

 在习惯一系列 C C C语言的文件操作内置函数后, 我们可以很轻松的写出下面的代码:

直接编译运行就行, 但是你需要保证有 s o u r c e source source文件

p s : ps: ps: 习惯书写 c c c ++, 改写C语言换个输出方式就可以了.

#include<bits/stdc++.h>
#define iOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;
signed main(void){ios; //c ++ 的关流, 不用管
  FILE *fp, *fq; //建立文件的索引指针
  if((fp = fopen("source" , "ra"))){ //打开需备份文件, 并且得到文件索引指针头
    cout << "success in readfile open!" << endl;
  }else{
    cout << "can\'t open readfile!" << endl;
    exit(1);
  }
  if((fq = fopen("target" , "wa"))){ //建立(打开)目标文件, 并且得到文件索引指针头
    cout << "success in writefile open!" << endl;
  }else {
    cout << "can\'t open writefile!" << endl;
    exit(1);
  }
  char buffer[20]; //设置一个缓冲区.
  while(fread(buffer, sizeof(char), 20, fp)){ //在需备份中一直获取内容
    fwrite(buffer, sizeof(char), 20, fq); //获取内容后一直同步输入目标文件
  }
  if(!fclose(fp)){ //关闭成功的返回值为0
    cout << "success in readfile close!" << endl;
  }else {
    cout << "can\'t close readfile!" << endl;
    exit(1);
  }
  if(!fclose(fq)){
    cout << "success in writefile close!" << endl;
  }else {
    cout << "can\'t close writefile!" << endl;
    exit(1);
  }
  return 0;
}

正确的运行结果:

  e m m . . . . . . emm... ... emm...... 作为小天才的我, 直接开润:

#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;
signed main(void){ios; //c ++ 的关流, 不用管
  freopen("source" , "r" , stdin);
  freopen("target" , "w" , stdout);
  char c;
  while((c = getchar()) != EOF) putchar(c);
  return 0;
}

二、系统调用函数:

 在查阅了相关资料后, 还是写了一份属于自己的作业. 代码如下(已经运行过, 有效.

需要先编译, 再在运行执行文件的同时加上调用的文件名, 具体实现步骤代码下方会演示.

p s : ps: ps: 虽然我很想补充代码解释, 但是都是凑出来的… …

#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
signed main(int arGC, char **argv) {
    int fp, fq;  //源文件的文件描述符, 目标文件的文件描述符
    char buffer[20];
    int nread;
    //判断参数个数是否正确
    if (argc != 3) {
        printf("error~");
        exit(1);
    }
    //打开源文件
    if ((fp = open(argv[1], O_RDONLY)) == -1) {
        printf("Open readfile Erron\n");
        exit(1);
    }
    //创建目标文件
    if ((fq = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR)) == -1) {
        printf("Open writefile Error\n");
        exit(1);
    }
    //进行文件拷贝
    while ((nread = read(fp, buffer, 20)) > 0) {
        if ((write(fq, buffer, nread)) != nread)  //将buffer中的数据写到目的文件
            printf("write error");
    }
    close(fp);
    close(fq);
    return 0;
}

好了作业也chao完了, 下面来对 C C C语言内置函数进行一些补充:

fopen(const char *filename, const char *mode)
//第一个参数表示打开的文件, 第二个参数表示给予的权限
表            文件操作类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符                含义
────────────────────────────────────────────────
"r"           打开文字文件只读
"w"           创建文字文件只写
"a"           增补, 如果文件不存在则创建一个
"r+"          打开一个文字文件读/写
"w+"          创建一个文字文件读/写
"a+"          打开或创建一个文件增补
"b"           二进制文件(可以和上面每一项合用)
"t"           文这文件(默认项)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
//第一个参数表示缓冲区(指针)
//第二个参数表示读取的每个元素的大小
//第三个参数表示元素的个数 (实际上第二个参数和第三个参数表示的总和就是缓冲区的大小
//第四个参数是对象的指针, 用来标记位置

fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
//第一个参数表示写入的内容
//后三个参数和fread一致

fclose(FILE *stream) //关闭成功的返回值是0
//参数是指针对象

fseek(FILE *stream, long int offset, int whence)
//第一个参数为指针对象, 就是要作用的指针
//第二个表示在第三个参数上的偏移量
//第三个参数索引位置
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符                含义
────────────────────────────────────────────────
SEEK_SET    文件的开头
SEEK_CUR    文件指针的当前位置
SEEK_END    文件的末尾
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

到此这篇关于C/C++详解如何实现文件备份的文章就介绍到这了,更多相关C++文件备份内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++详解如何实现文件备份

本文链接: https://www.lsjlt.com/news/150966.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++详解如何实现文件备份
    目录一、C语言库的实现方法:二、系统调用函数:编写C程序,模拟实现Linux文件系统的简单I/O流操作:备份文件,将源文件source.dat备份为target.dat文件。要求: ...
    99+
    2022-11-13
  • C/C++实现segy文件的读取详解
    目录1头文件ReadSeismic.h的编写及其规范1.1程序描述、调用、声明、定义1.2声明函数1.3完整代码2C++文件ReadSeismic.cpp的编写及其规范2.1必要的说...
    99+
    2022-11-13
  • 详解C#如何实现读写ini文件
    目录介绍1.创建一个ini文件2.创建一个winform界面3.添加一个ini管理类4.添加winform代码介绍 INI文件格式由节、键、值组成。 节 [section] 参数 (...
    99+
    2022-11-13
  • Python 实现文件的全备份和差异备份详解
    Python实现文件的全备份和差异备份 之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题: md5sum获取有些软连接的MD5值存在问题 不支持对空目录进行备份,因为md5...
    99+
    2022-06-04
    备份 详解 差异
  • C/C++ QT如何实现解析JSON文件
    这篇“C/C++ QT如何实现解析JSON文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C/C++ ...
    99+
    2023-06-26
  • C#实现XML文件操作详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-23
    C# XML文件操作 C# XML 操作 C# XML
  • C#实现加密bat文件的示例详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2023-01-03
    C#加密bat文件 C#加密bat C#加密
  • C#实现CSV文件读写的示例详解
    目录CSV文件标准文件示例RFC 4180简化标准读写CSV文件使用CsvHelper使用自定义方法总结项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件的解析。本文会介...
    99+
    2023-05-19
    C#读写CSV文件方法 C#读写CSV文件 C#读写CSV C# CSV
  • C#实现读写CSV文件的方法详解
    目录CSV文件标准文件示例RFC 4180简化标准读写CSV文件使用CsvHelper使用自定义方法总结项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件的解析。本文会介...
    99+
    2022-11-13
  • 详解C#如何加密解密RAR文件
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-31
    C#加密解密RAR文件 C#加密RAR C#解密RAR
  • C\C++如何实现读写二进制文件
    这篇文章主要介绍“C\C++如何实现读写二进制文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C\C++如何实现读写二进制文件”文章能帮助大家解决问题。读写二进制文件打开文件fopen() 函数用...
    99+
    2023-07-05
  • C和C++如何实现互相调用详解
    目录前言1、为什么会有差异?2、extern “C”3、C++调用C正确方式4、C调用C++补充:C/C++文件之间函数的引用总结前言 在项目开发过程中,我们...
    99+
    2023-01-10
    c++中调用c c和c++混合编译 c语言能调用c++吗
  • C#如何实现文件传送
    这篇文章给大家分享的是有关C#如何实现文件传送的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C#文件传送使用较为频繁的场景,是即时聊天工具中的文件传输。比如点对点方面的传送。在一般情况下,C#文件传送都要对通信端...
    99+
    2023-06-17
  • C++ IO设备读写功能实现详解
    目录1 输入输出IO流1.1 图解输入输出流1.2 输入输出流类库2 文件读写操作2.1 文件的打开方式2.2 文件读写类库的头文件2.3 文本文件读写使用ofstream来写文本使...
    99+
    2022-11-13
    C++ IO设备读写 C++设备读写
  • c#如何利用定时器自动备份数据库详解
    目录引用dll 静态类 定时器启动 备份代码 总结引用dll mysql.data.dll是MySQL数据库中一款必备的驱动文件,主要用于.net编程和MySQL数据库的连接,包含...
    99+
    2022-11-12
  • 如何使用vbs实现文件备份
    这篇文章主要为大家展示了“如何使用vbs实现文件备份”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用vbs实现文件备份”这篇文章吧。objs = "c:\aa...
    99+
    2023-06-08
  • C#实现文件分割和合并的示例详解
    目录实践过程效果代码实践过程 效果 代码 public partial class frmSplit : Form { public frmSplit() { ...
    99+
    2022-12-26
    C#文件分割 合并 C#文件分割 C#文件合并
  • C语言实现读取CSV文件的方法详解
    1、每一次只能读取同一种数据类型,不能读取字符串。 2、第次读取会返回一个 CSV数据结构,有源数据和二维数组,行列数信息 3、可以转换二维数组,但总大小不能变 123.csv M...
    99+
    2022-12-21
    C语言读取CSV文件 C语言读取CSV C语言 CSV
  • C/C++实现快速排序(两种方式)图文详解
    目录介绍实现方式一方式二总结介绍 快速排序是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序。 流程如下:   实现 以下有两种实现方式,说是两种,其...
    99+
    2022-11-12
  • 如何用C#实现压缩文件
    目录一、单文件压缩二、多文件压缩三、多文件异步压缩四、压缩文件夹一、单文件压缩 场景,文件可能比较大,需要压缩传输,比如上传和下载 /// <summary> ///...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作