1 题目
功能:将文件中的内容从一个文件拷贝到另外一个文件
描述:将上一个案例中的ex043_file.dat 赋值内容到 ex044_file.data
2 思路
1、在访问磁盘文件时,是逐个字符(字节)进行的,为了知道当前访问到第几个字节,系统用 "文件读写位置标记" 来表示当前所访问的位置。开始时“文件读写位置标记”指向第1个字节, 每访问完一个字节后,当前读写位置就指向下一个字节,即当前读写位置自动后移。
2、为了知道对文件的访问是否完成,只须看文件读写位置是否移到文件的末尾。用feof函数可以检查到"文件读写位置标记"是否移到文件的末尾,即磁盘文件是否结束。程序第 26 行中的feof(in)是检查in所指向的文件是否结束。如果是,则函数值为1(真),否则为0(假),也就是“ !feof(in) ”为真,在while循环中检査“!feof(in)”为真,就执行循环体。
3、运行结果是将file.dat文件中的内容复制到file2.dat中去。打开这两个文件,可以看到filel. dat 和 file2. dat 的内容都是:
This is the first message
copy to another file
4、以上程序是按文本文件方式处理的。也可以用此程序来复制一个二进制文件,只须将两个fopen函数中的“r”和“w”分别改为“rb”和“wb”即可。
5、C 系统已把fputc和fgetc函数定义为宏名putc和getc:
# define putc(ch, fp) fputc(ch, fp)
# define getc(fp) fgetc(fp)
这是在 <stdio.h> 中定义的。因此,在程序中用putc和fputc作用是一样的,用getc和fgetc作用是一样的。在使用的形式上,可以把它们当作相同的函数对待。
3 代码
#include <stdio.h>
#include <stdlib.h>
/**
功能:将文件中的内容从一个文件拷贝到另外一个文件
描述:将上一个案例中的ex043_file.dat 赋值内容到 ex044_file.dat
**/
intmain(intargc,charconst*argv[]) {
FILE*in,*out; // 指向文件的变量
charch,infile[20],outfile[20]; // 定义的两个字符数组,分别存放两个数据文件名
printf("输入读入文件的名称(ex043_file.dat):");
scanf("%s",infile); // 输入第一个要读取文件的文件名
printf("输入输出文件的名称(ex044_file.dat):");
scanf("%s",outfile); // 输入第一个要读取文件的文件名
if((in=fopen(infile,"r"))==NULL) { // 打卡输入文件
printf("无法打开输入文件..\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL) { // 打卡输出文件
printf("无法打开输出文件..\n");
exit(0);
}
while(!feof(in)) { // 如果未遇到输入文件的结束标志,每次访问完一个字节后自动指向下一个字节
ch=fgetc(in); // 从输入文件中读取一个
fputc(ch,out); // 将 ch 写到 outfile 中
putchar(ch); // 显示到屏幕上
}
putchar(10); // 最后进行换行
fclose(in); // 关闭输入文件
fclose(out); // 关闭输出文件
return0;
}
示例结果:
$ gccex044.c-odemo
$ ./demo
输入读入文件的名称(ex043_file.dat):ex043_file.dat
输入输出文件的名称(ex044_file.dat):ex044_file.dat
This is the first message
copy to another file
原来文件中的内容:
This is the first message copy to another file
赋值过去的文件内容:
This is the first message
copy to another file
�