⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 王大刚--c语言编程宝典--1_2 文件的输入输出函数.htm

📁 用C语言编写的一些源码示例
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      puts("File close error");/*提示关闭不成功*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>
      <P>&nbsp;&nbsp;&nbsp; 二、有关文件操作的函数 <BR>&nbsp;&nbsp;&nbsp; 
      本节所讲的文件读写函数均是指顺序读写, 即读写了一条信息后, 指针自动 <BR>加1。下面分别介绍写操作函数和读操作函数。 <BR>
      <P>&nbsp;&nbsp;&nbsp; 1. 文件的顺序写函数 <BR>&nbsp;&nbsp;&nbsp; 
      fprintf()、fputs()和fputc()函数 <BR>&nbsp;&nbsp;&nbsp; 
      函数fprintf()、fputs()和fputc()均为文件的顺序写操作函数,&nbsp; 其调用格 <BR>式如下: 
      <BR>&nbsp;&nbsp;&nbsp; int fprintf(FILE *stream, char *format, 
      &lt;variable-list&gt;); <BR>&nbsp;&nbsp;&nbsp; int fputs(char *string, 
      FILE *steam); <BR>&nbsp;&nbsp;&nbsp; int fputc(int ch, FILE *steam); 
      <BR>&nbsp;&nbsp;&nbsp; 上述三个函数的返回值均为整型量。fprintf() 函数的返回值为实际写入文 
      <BR>件中的字罕个数(字节数)。如果写错误, 则返回一个负数, fputs()函数返回0时 
      <BR>表明将string指针所指的字符串写入文件中的操作成功, 返回非0时,&nbsp; 表明写操 
      <BR>作失败。fputc()函数返回一个向文件所写字符的值, 此时写操作成功,&nbsp; 否则返 <BR>回EOF(文件结束结束其值为-1, 
      在stdio.h中定义)表示写操作错误。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; fprintf( ) 
      函数中格式化的规定与printf( ) 函数相同,&nbsp;&nbsp; 所不同的只是 
      <BR>fprintf()函数是向文件中写入。而printf()是向屏幕输出。 <BR>&nbsp;&nbsp;&nbsp; 下面介绍一个例子, 
      运行后产后一个test.dat的文件。 <BR>&nbsp;&nbsp;&nbsp; 例11: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; #include&lt;stdio.h&gt; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; main() <BR>&nbsp;&nbsp;&nbsp;&nbsp; { 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *s="That's 
      good news");&nbsp; /*定义字符串指针并初始化*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int 
      i=617;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*定义整型变量并初始化*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      FILE 
      *fp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*定义文件指针*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fp=fopne("test.dat", "w");&nbsp;&nbsp;&nbsp; /*建立一个文字文件只写*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fputs("Your 
      score of TOEFLis", fp);/*向所建文件写入一串字符*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fputc(':', 
      fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*向所建文件写冒号:*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fprintf(fp, "%d\n", i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*向所建文件写一整型数*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(fp, 
      "%s", s);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*向所建文件写一字符串*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fclose(fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*关闭文件*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; 
      用DOS的TYPE命令显示TEST.DAT的内容如下所示: <BR>&nbsp;&nbsp;&nbsp; 屏幕显示 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Your score of TOEFL is: 617 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; That's good news <BR>
      <P>&nbsp;&nbsp;&nbsp; 2. 文件的顺序读操作函数 <BR>&nbsp;&nbsp;&nbsp; 
      fscanf()、fgets()和fgetc()函数 <BR>&nbsp;&nbsp;&nbsp; 
      函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式 <BR>如下: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; int fscanf(FILE *stream, char *format, 
      &lt;address-list&gt;); <BR>&nbsp;&nbsp;&nbsp;&nbsp; char fgets(char 
      *string, int n, FILE *steam); <BR>&nbsp;&nbsp;&nbsp;&nbsp; int fgetc(FILE 
      *steam); <BR>&nbsp;&nbsp;&nbsp; fscanf()函数的用法与scanf()函数相似,&nbsp;&nbsp; 
      只是它是从文件中读到信息。 <BR>fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。fgets()函 
      <BR>数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的 <BR>字符串中, 
      在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针, 
      <BR>失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符,&nbsp; 读错误时返 <BR>回EOF。 
      <BR>&nbsp;&nbsp;&nbsp; 下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。 
      <BR>&nbsp;&nbsp;&nbsp; 例12 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      #include&lt;stdio.h&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; main() 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; { 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *s, m[20]; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE&nbsp; *fp; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fp=fopen("test.dat", "r");&nbsp;&nbsp;&nbsp; /*打开文字文件只读*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fgets(s, 24, 
      fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*从文件中读取23个字符*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      printf("%s", 
      s);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*输出所读的字符串*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fscanf(fp, "%d", &amp;i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*读取整型数*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      printf("%d", 
      i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*输出所读整型数*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      putchar(fgetc(fp));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*读取一个字符同时输出*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fgets(m, 17, 
      fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*读取16个字符*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      puts(m);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*输出所读字符串*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      fclose(fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*关闭文件*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getch();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*等待任一键*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; 运行后屏幕显示: 
      <BR>&nbsp;&nbsp;&nbsp; Your score of TOEFL is: 617 <BR>&nbsp;&nbsp;&nbsp; 
      That's good news <BR>&nbsp;&nbsp;&nbsp; 如果将上例中fscanf(fp, "%d", 
      &amp;i)改为fscanf(fp, "%s", m),&nbsp; 再将其后 <BR>的输出语句改为printf("%s", m), 
      则可得出同样的结果。由此可见Turbo C2. 0 <BR>中只要是读文字文件, 则不论是字符还是数字都将按其ASCII值处理。 另外还要 
      <BR>说明的一点就是fscanf()函数读到空白符时, 便自动结束, 在使用时要特别注意。 <BR>
      <P>&nbsp;&nbsp;&nbsp; 3. 文件的随机读写 <BR>&nbsp;&nbsp;&nbsp; 
      有时用户想直接读取文件中间某处的信息, 若用文件的顺序读写必须从文件 <BR>头开始直到要求的文件位置再读, 这显然不方便。Turbo 
      C2.0提供了一组文件的 <BR>随机读写函数, 即可以将文件位置指针定位在所要求读写的地方直接读写。 <BR>&nbsp;&nbsp;&nbsp; 
      文件的随机读写函数如下: <BR>&nbsp;&nbsp;&nbsp; int fseek (FILE *stream, long offset, 
      int fromwhere); <BR>&nbsp;&nbsp;&nbsp; int fread(void *buf, int size, int 
      count, FILE *stream); <BR>&nbsp;&nbsp;&nbsp; int fwrite(void *buf, int 
      size, int count, FILE *stream); <BR>&nbsp;&nbsp;&nbsp; long ftell(FILE 
      *stream); <BR>&nbsp;&nbsp;&nbsp; 
      fseek()函数的作用是将文件的位置指针设置到从fromwhere开始的第offset <BR>字节的位置上, 
      其中fromwhere是下列几个宏定义之一: <BR>&nbsp;&nbsp;&nbsp; 文件位置指针起始计算位置fromwhere 
      <BR>━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>&nbsp;&nbsp;&nbsp; 
      符号常数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      数值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 含义 
      <BR>─────────────────────────── <BR>&nbsp;&nbsp;&nbsp; 
      SEEK_SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从文件开头 <BR>&nbsp;&nbsp;&nbsp; 
      SEEK_CUR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从文件指针的现行位置 
      <BR>&nbsp;&nbsp;&nbsp; 
      SEEK_END&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从文件末尾 
      <BR>━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>&nbsp;&nbsp;&nbsp; 
      offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字 <BR>节数。它是一个长整型量, 
      以支持大于64K字节的文件。fseek()函数一般用于对 <BR>二进制文件进行操作。 <BR>&nbsp;&nbsp;&nbsp; 
      当fseek()函数返回0时表明操作成功, 返回非0表示失败。 <BR>&nbsp;&nbsp;&nbsp; 
      下面程序从二进制文件test_b.dat中读取第8个字节。 <BR>&nbsp;&nbsp;&nbsp; 例13: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; #include&lt;stdio.h&gt; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; main() <BR>&nbsp;&nbsp;&nbsp;&nbsp; { 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE *fp; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if((fp=fopen("test_b.dat", "rb"))==NULL) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      printf("Can't open file"); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -