CP 之改进

在上一次的代码中,不管目标文件是否存在我们都会复制一遍,这就可能会破坏已有的文件

/*
    本程序所实现的功能为 【**.exe srcFile  desFile】 ,就是将srcFile 拷贝一份到desfile,
    所以在运行程序时必须在后面添加两个参数,第一个是已经存在的文件的路径,另一个是需要
    复制到的路径。
    本程序主要是利用文件操作函数中的 fgetc() 函数 与 fputc() 函数。

    函数说明:
        fgetc(FILE *fp):
            从流中读取一个字符,同时没取完一个字符fp 指针会自动指向下一个字符。
            当读取错误时会返回EOF。可以通过返回值判断当前文件是否读完。
        fputc(char ch, FILE *fp):
            向流中输入一个字符,与fgetc 相似,在每写入一个后fp 指向下一个,等待继续输入,或者
            流关闭

    在函数中我们还需要用到 fopen(char * fileName, char *type),第一个参数就是我们所需要的文件路径,
    第二个参数就是读取的方式。读取方式如下:
        r:只读方式打开一个文本,只允许读数据
        w:只写打开或建立一个文本文件,只允许写数据
        a:追加打开一个文本文件,并在文件末尾写数据
        rb:只读打开一个二进制文件,只读
        wb:只写打开,或建立一个二进制文件,只允许写数据
        ab:追加打开一个二进制文件,并在文件末尾写数据
        r+:读写打开一个文本文件,允许写和读
        w+:读写打开或建立一个文本文件,可以读和写
        a+:读写打开一个文本文件,允许读,或在文件末尾追加数据
        rb+:读写打开一个二进制文件,允许读和写
        wb+:读写打开或建立一个二进制文件,允许读和写
        ab+:读写打开一个二进制文件,允许读,或在文件末尾追加数据
    还有第二个函数fclose(FILE *fp) ,也就是关闭文件流,这个很重要

    后面添加:
        函数原型: int access(const char *filename, int mode);

        所属头文件:#include <io.h>
        filename:可以填写文件夹路径或者文件路径

        mode: 0 (F_OK) 只判断是否存在

               2 (R_OK) 判断写入权限

               4 (W_OK) 判断读取权限

               6 (X_OK) 判断执行权限

        在这个程序中我们只使用用F_OK 文件是否存在

*/
#include<io.h>// 在这个头文件中包含有检测当前文件是否存在的函数access(const char *filename, int mode);
#include<stdio.h>// 在这个头文件中包含了我们所需要的各个文件操作函数
int main(int argc, char* argv[])
{
    FILE *srcFile , *desFile;//定义两个文件指针
    if(argc != 3)// 判断参数输入是否满足要求
    {
        printf("Please input <%s srcFile desFile>",argv[0]);// 这个地方提示用户程序执行的正确方式
        return 0;
    }
    srcFile = fopen(argv[1],"rb");//以读取二进制的方式打开源文件
    if(srcFile == NULL)
    {
        printf("Source file open failure!!");
        printf("Press any key to close!!");
        getchar();
        return 0;
    }

    if ( !access(argv[2],0) )
    {
        printf("%s EXISITS!!",argv[2]);
        printf("Source file open failure!!");
        printf("Press any key to close!!");
        getchar();
        return 0;
    }

    desFile = fopen(argv[2],"wb");//以写入二进制方式打开目标文件
    if(desFile == NULL)
    {
        printf("Destination file open failure!!");
        printf("Press any key to close!!");
        getchar();
        return 0;
    }
      /* start copy */
    while(!feof(srcFile))// 判断当前指针的指向是否为EOF
    {
        putc(getc(srcFile),desFile);
    }

    fclose(srcFile);
    fclose(desFile);

    return 0;
}

/* 这个程序如果想要更加的人性话,可以在用户运行函数后,输入源文件和目标文件,同时还应具备
    检查目标文件是否存在的问题,不然在复制文件时,可能导致其他文件受损。
*/

// 已经加入判断文件是否存在
时间: 2024-10-18 08:36:43

CP 之改进的相关文章

ubuntukylin基础 cp 在同一个文件夹下进行文件的更名复制

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ 我的系统:UbuntuKylin 16.04 LTS 64bit cp 源文件 目标文件 1 查看当前工作目录下的文件 2 复制 myFirstText.txt文件 ,粘贴到当

实现简单的cp命令

在Linux下实现简单的cp命令.这是<APUE>第四章的其中一道练习题. 其实思路很简单,弄清规则就行了.规则1:源文件必须得存在,否则出错:规则2:目的文件若不存在则创建,若存在,则提示是否覆盖,是就覆盖,不是就重新建一个. 下面给出代码: 1 /* 实现简单的cp命令 */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 6 int my_cp(char *argv[

k-近邻算法改进约会网站配对效果

k-近邻算法改进约会网站配对效果 一.理论学习 1. 阅读内容 请务必仔细阅读<机器学习实战>书籍第1章及第2章,本节实验通过解决约会网站配对效果问题来实战 k-近邻算法(k-Nearest Neighbour,KNN) 2. 扩展阅读 本节推荐内容可以辅助书中理论知识,比书中内容更容易理解,可以加深理论知识,请仔细阅读: 酷壳 - K Nearest Neighbor 算法 数据挖掘十大算法--K近邻算法 二.在线实验 1. 分析需求 我在约会网站看到的人,分为三类: 不喜欢的 一般喜欢的

编写自己的cp命令

有时候要对整个目录做备份,修改cp1.c使得当两个参数都是目录时,把第一个目录中的所有文件复制到第二个目录中,文件名不变.那么该如何实现? 我们先来看看cp1.c的实现方式,它从一个文件中读取数据然后写到另一个文件中,通过系统调用open(或者creat).read.wirte和close来完成.从上面我们看出,cp1.c只是针对于一个文件进行的复制操作,而现在我们需要完成对整个目录的备份.参数由一个单独的文件(file)变成一个目录(directory),所以我们首先想到的就是要先进入到这个目

【翻译自mos文章】尽管指定了目的地,asmcmd cp命令还是在 +DATA/ASM 下创建文件

尽管指定了目的地,asmcmd cp命令还是在  +DATA/ASM 下创建文件 参考原文: ASMCMD Cp Creates Files In +DATA/ASM Instead Of Destination Specified (Doc ID 1488934.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.3 and later Information in this document applies to any

【翻译自mos文章】虽然指定了目的地,asmcmd cp命令还是在 +DATA/ASM 下创建文件

虽然指定了目的地.asmcmd cp命令还是在  +DATA/ASM 下创建文件 參考原文: ASMCMD Cp Creates Files In +DATA/ASM Instead Of Destination Specified (Doc ID 1488934.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.3 and later Information in this document applies to any

深度剖析阿里巴巴对Apache Flink的优化与改进

本文主要从两个层面深度剖析:阿里巴巴对Flink究竟做了哪些优化? 取之开源,用之开源 一.SQL层 为了能够真正做到用户根据自己的业务逻辑开发一套代码,能够同时运行在多种不同的场景,Flink首先需要给用户提供一个统一的API.在经过一番调研之后,阿里巴巴实时计算认为SQL是一个非常适合的选择.在批处理领域,SQL已经经历了几十年的考验,是公认的经典.在流计算领域,近年来也不断有流表二象性.流是表的ChangeLog等理论出现.在这些理论基础之上,阿里巴巴提出了动态表的概念,使得流计算也可以像

基于HBase的时间序列数据库(改进)

基本知识: 期望:1.利用高效的行.列键组织数据存储方式和使用平滑的数据持久策略缓解集群压力 2.利用zookeeper保障数据一致性(选举Leader) 提高性能的技术:数据压缩.索引技术.实体化视图 zookeeper 监控HRegionServer,保存Root Region实际地址,HMaster物理地址,减轻分布式应用从头开发协作服务的负担 HMaster管理HRegionServer负载均衡 日志根据Hadoop的SequenceFile存储 HBase主要处理实际数据文件和日志文件

结对项目改进(林莉 + 宫丽君)

1.产生随机的四位数,如果出现0则把0赋值为1 1 int rightNum = 0; //正确题数 2 int wrongNum = 0; //错误题数 3 Scanner scan = new Scanner(System.in); 4 for(int i =1;i<=10;i++) { 5 System.out.println("第"+ i +"题"); 6 int num1 = (int )(Math.random()*10); 7 int num2