《C语言课程设计》一3.1 文件复制

3.1 文件复制

【例3.1】编写文本文件复制程序,命令行格式为:mycopy filename1 filename2。
题目分析
每个C语言程序必须定义一个main函数作为程序的入口。程序启动从main函数开始执行,main函数返回时程序终止,若main函数末尾没有返回语句,则默认执行return 0语句。
标准C语言的main函数有两种形式:接受0个参数的int main(void),即int main();接受2个参数的int main(int argc, char *argv[])。对于后者,形参argc表示传递给程序的参数个数;形参argv是指针数组,其每个指针分别指向传递给程序的字符串参数,第一个字符串argv[0]是程序的名称。
文件的打开和关闭可调用fopen和fclose函数。文件的读取和写入可通过三种方式实现:1)fgetc和fputc函数配合,每次读写一个字符,见参考程序mycopyV1.c;2)fscanf和fprintf函数配合,每次读写一个字符,见参考程序mycopyV2.c;3)fread和fwrite函数配合,每次读写BUFSIZE个字符,见参考程序mycopyV3.c。方式3)通过增设缓冲区buffer[BUFSIZE],减少I/O操作的次数,提高程序运行速度,可用于读写量较大的程序。
检测到异常时,用exit标准库函数退出。void exit(int status) 函数可正常终止一个程序并执行清理操作,形参status值为0表示程序成功退出,非零值可表示各类异常终止。从main函数通过return语句返回一个整数值相当于用这个整数值调用exit函数。exit函数在头文件stdlib.h中声明。
参考程序

/*
 * 文件名: mycopyV1.c
 * 描述: 编写文件复制命令行程序,命令行格式为:mycopy filename1 filename2
 * 作者: 刘博
 */

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fpSrc, *fpDes;
    char ch;

    /* 检查命令行参数个数 */
    if (argc != 3) {
        printf("Usage: mycopy SourceFile DestinationFile\n");
        exit(1);
    }     

    /* 打开文件 */
    if ((fpSrc = fopen(argv[1], "r")) == NULL) {
        printf("open file error!\n");
        exit(1);
    }

    if ((fpDes = fopen(argv[2], "w")) == NULL) {
        printf("creat file error!\n");
        exit(1);
    }

    /* 复制文件 */
    while ((ch = fgetc(fpSrc)) != EOF) {
        fputc(ch, fpDes);
    }

    /* 关闭文件 */
    fclose(fpSrc);
    fclose(fpDes);
}

/*
 * 文件名: mycopyV2.c
 * 描述: 编写文件复制命令行程序,命令行格式为:mycopy filename1 filename2
 * 作者: 刘博
 */

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fpSrc, *fpDes;
    char ch;

    /* 检查命令行参数个数 */
    if (argc != 3) {
        printf("Usage: mycopy SourceFile DestinationFile\n");
        exit(1);
    }     

    /* 打开文件 */
    if ((fpSrc = fopen(argv[1], "r")) == NULL) {
        printf("open file error!\n");
        exit(1);
    }

    if ((fpDes = fopen(argv[2], "w")) == NULL) {
        printf("creat file error!\n");
        exit(1);
    }

    /* 复制文件 */
    while (fscanf(fpSrc, "%c", &ch) != EOF) {
        fprintf(fpDes, "%c", ch);
    }              

    /* 关闭文件 */
    fclose(fpSrc);
    fclose(fpDes);
}

/*
 * 文件名: mycopyV3.c
 * 描述: 编写文件复制命令行程序,命令行格式为:mycopy filename1 filename2
 * 作者: 刘博
 */

#include <stdio.h>
#include <stdlib.h>

#define BUFSIZE 1024

int main(int argc, char *argv[])
{
    FILE *fpSrc, *fpDes;
    char buffer[BUFSIZE];
    int in, out; 

    /* 检查命令行参数个数 */
    if (argc != 3) {
        printf("Usage: mycopy SourceFile DestinationFile\n");
        exit(1);
    }     

    /* 打开文件 */
    if ((fpSrc = fopen(argv[1], "r")) == NULL) {
        printf("open file error!\n");
        exit(1);
    }

    if ((fpDes = fopen(argv[2], "w")) == NULL) {
        printf("creat file error!\n");
        exit(1);
    }

    /* 复制文件 */
    while ((in = fread(buffer, 1, BUFSIZE, fpSrc)) > 0) {
        out = fwrite(buffer, 1, in, fpDes);
        /* 判断读出和写入元素个数是否一致 */
         if (in != out) {
            printf("copy error!\n");
            exit(1);
        }
    }

    /* 关闭文件 */
    fclose(fpSrc);
    fclose(fpDes);
}
时间: 2024-08-02 15:16:08

《C语言课程设计》一3.1 文件复制的相关文章

c语言-C语言课程设计字符串题目匹配单词,求大神~~~~~~~~~~~~~~~~~

问题描述 C语言课程设计字符串题目匹配单词,求大神~~~~~~~~~~~~~~~~~ 详细题目如下:设有n个单词的字典表(1<=n<=100),计算某单词在字典表中的4种匹配情况(字典中的单词和待匹配的单词长度上限为255):1)i :该单词在字典表中的序号:2)Ei:在字典表中仅有一个字符不匹配的单词不匹配的单词序号:3)Fi:在字典表中多(或少)一个字符(其余字符匹配)的单词序号:4)N:其他情况.当查找时有多个单词符合条件,仅要求第1个单词的序号即可.1)输入文件,文件格式为:n(字典表

《C语言课程设计》一导读

前 言 C语言课程设计是计算机程序设计的主要实践课程,为帮助读者熟练掌握基本的程序设计方法,我们编写了本书. 本书将程序设计题目分为文件类.字符串类.算法类.综合类和其他类共五大类,集同类题目于一章,方便读者集中学习:不少题目提供了多种实现方法,启发读者多角度思考:题目分析力求重点突出.简洁明了,而非面面俱到,希望读者能够结合参考程序阅读思考. 本书对C程序设计语言的编程环境.调试程序的基本方法.编码风格等方面进行了介绍.参考程序均按照编码风格并使用标准C语言撰写,以增强程序的可读性,方便读者自

c语言课程设计总结心得大全

c语言课程设计心得体会范文一: 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在.因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的. 回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固

c语言-C语言课程设计---商品订购系统 调试

问题描述 C语言课程设计---商品订购系统 调试 #include #include int inumber = 0; //商品量的统计 int ibuy = 0; //订单的统计 void secondmain(); //管理维护子菜单 void jianpanload(); //输入商品 void scanproduct(); //浏览商品 void searchproduct(); //搜索商品 void dinggou(); //订购商品 void lookdinggou(); //查询

c c++-c语言课程设计 仓库物资管理

问题描述 c语言课程设计 仓库物资管理 仓库物资管理() (问题描述) 设计某仓库物资管理系统,有四大类物资:黑色金属.有色金属.非金属.机电设备.(基本要求) 按类管理物资,管理功能如下: (1)物资按四大类入库,记录库存明细账(包括账号.品名.规格.单价.数量.金额.产地.入库日期). (2)出库:记录出库明细账 (3)查询 (4)分类统计:月报表.季报表.年报表 解决方案 http://zhidao.baidu.com/link?url=7QetsNgaTw1gdxr8ajsbSvKhX5

图论-c语言课程设计分油问题

问题描述 c语言课程设计分油问题 输入三个油瓶容量与目标容量, 用邻接矩阵求它的最短路径 ,先判断两点间有没有路 最短路是什么, 调用邻接矩阵函数求 . 解决方案 http://www.it165.net/pro/html/201407/16957.html 解决方案二: C语言课程设计具体安排说明关于操作系统课程设计的问题<c语言课程设计>---职工信息管理系统

学生信息管理系统-c++语言课程设计任务选项

问题描述 c++语言课程设计任务选项 用c++语言编写学生信息管理系统 解决方案 http://wenku.baidu.com/link?url=u6qLhXbR7ZoieB8qD283ls-uBy-95oNz0JNQ--R7_PoL1PS0t1yn-V0T64CzvUFMwLHZ31ENgdLgW4MaUxGgjBcVpR6J55pgpOiic3kd7VS 解决方案二: http://blog.csdn.net/bdmh/article/details/6112631 有一个简单的学生成绩管理

file-c语言在linux环境下进行文件复制的代码,使用时出错,求各位大神帮忙解答下

问题描述 c语言在linux环境下进行文件复制的代码,使用时出错,求各位大神帮忙解答下 #include#include#include#include#include#include#include#define BUFSIZE 4096#define COPYMODE 0644 void oops(char *char *);void *emalloc(size_t);void do_copy(char *char *);void copydir(char *char *);int isdi

C语言课程设计

今天给大家分享一下小编当年大一C语言做的课程涉设计(学生成绩以及基本信息系统)有什么疑问和不懂的可以给我留言   #include <stdio.h> #include <stdlib.h> #include <string.h> struct student { long num; char name[12]; char phone[11]; char city[12]; char postal[6]; struct student *next ; }; long n