将磁盘文件的内容进行读取

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!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容