1 题目
功能:对一个文件重复读取(利用rewind()函数)
描述:
将磁盘文件的内容进行读取
第一次将它的内容显示在屏幕上,第二次把他复制到另外一个文件中
2 知识点
对文件需要进行随机读取的原因: 对文件进行顺序读写比较容易理解,也容易操作,但有时效率不高,例如文件中有1000个数据,若只査第1000个数据,必须先逐个读入前面999个数据,才能读入第1000个数据。如果文件中存放一个城市几百万人的资料,若按此方法查某一人的情况,等待的时间可能太长了。 随机访问不是按数据在文件中的物理位置次序进行读写,而是可以对任何位置上的数 据进行访问,显然这种方法比顺序访问效率高得多。
rewind() 函数
文件位置标记定位,强制使文件位置标记指向文件开头,此函数没有返回值
3 思路
可以利用 rewind() 函数进行操作,当第一次读取完后,文件位置标记指向了文件尾,那么使用 rewind() 函数将文件位置标记重新返回到文件头部
4 代码
#include <stdio.h>
#include <stdlib.h>
/**
功能:对一个文件重复读取
描述:将磁盘文件的内容进行读取,第一次将它的内容显示在屏幕上,第二次把他复制到另外一个文件中
**/
int main(int argc, char const *argv[]) {
FILE * fp1, * fp2;
fp1 = fopen("ex047_1.dat", "r"); // 打开输入文件
fp2 = fopen("ex047_2.dat", "w"); // 打开写入文件
while(!feof(fp1)){
putchar(fgetc(fp1)); // 输出到屏幕
}
putchar(10); // 换行
rewind(fp1); // 文件位置标记重新返回文件的开头
while(!feof(fp1)) {
fputc(fgetc(fp1), fp2); // 重头,逐个字符读取写入到ex047_2.dat
}
fclose(fp1);
fclose(fp2);
return 0;
}
执行后结果:
$ gcc ex047.c -o demo
$ ./demo
hello
world
this is my first use of wind!
ex047_2.dat 文件中内容,与ex047_1.dat一致:
hello
world
this is my first use of wind!