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

    xiaoxiao2021-04-17  244

    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); } 相关资源:复制文件(C语言实现)

    最新回复(0)