C语言文件的用法


C语言文件类型


定义

  • 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可
    对它所指的文件进行各种操作
    FILE * 指针变量标识符;
    例如:
    FILE *fp;

文件的打开与关闭

fopen 函数

  • 用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式);

文件使用方式 意义
“r” 只读的方式打开一个文本文件,只允许读数据
“w” 只写的方式打开或建立一个文本文件,只允许写数据
“a” 追加的方式打开一个文本文件,并在文件末尾写数据
“rb” 只读的方式打开一个二进制文件,只允许读数据
“wb” 只写的方式打开或建立一个二进制文件,只允许写数据
“ab” 追加的方式打开一个二进制文件,并在文件末尾写数据
“r+” 读写的方式打开一个文本文件,允许读和写
“w+” 读写的方式打开或建立一个文本文件,允许读写
“a+” 读写的方式打开一个文本文件,允许读,或在文件末追加数据
“rb+” 读写的方式打开一个二进制文件,允许读和写
“wb+” 读写的方式打开或建立一个二进制文件,允许读和写
“ab+” 读写的方式打开一个二进制文件,允许读,或在文件末追加数据

fclose 函数

  • 文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。

调用的一般形式是:
fclose(文件指针);

close(*fp);

文件的读写

对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:

  • 字符串读写函数:fgets 和 fputs
  • 数据块读写函数:freed 和 fwrite
  • 格式化读写函数:fscanf 和 fprinf
    下面分别予以介绍。使用以上函数都要求包含头文件 stdio.h。

读字符函数 fgetc

fgetc 函数的功能是从指定的文件中读一个字符,函数调用的形式为:
字符变量=fgetc(文件指针);

写字符函数 fputc

fputc 函数的功能是把一个字符写入指定的文件中,函数调用的形式为:
fputc(字符量,文件指针);

读字符串函数 fgets

函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
其中的 n 是一个正整数。表示从文件中读出的字符串不超过 n-1 个字符。在读入的最
后一个字符后加上串结束标志’\0’。

写字符串函数 fputs

fputs 函数的功能是向指定的文件写入一个字符串,其调用形式为:
fputs(字符串,文件指针);
其中字符串可以是字符串常量,也可以是字符数组名,或指针变量,

数据块读写函数fread 和fwtrite

C语言还提供了用于整块数据的读写函数。可用来读写一组数据,如一个数组元素,一
个结构变量的值等。
读数据块函数调用的一般形式为:

fread(buffer,size,count,fp);

写数据块函数调用的一般形式为:

fwrite(buffer,size,count,fp);

其中:

  • buffer 是一个指针,在 fread 函数中,它表示存放输入数据的首地址。在 fwrite 函数中,它表示存放输出数据的首地址。
  • size 表示数据块的字节数。
  • count 表示要读写的数据块块数。
  • fp 表示文件指针。

    格式化读写函数fscanf 和fprintf

    fscanf 函数,fprintf 函数与前面使用的 scanf 和 printf 函数的功能相似,都是格式化读写函数。两者的区别在于 fscanf 函数和 fprintf 函数的读写对象不是键盘和显示器,而是磁盘文件。
    这两个函数的调用格式为:
    fscanf(文件指针,格式字符串,输入表列);
    fprintf(文件指针,格式字符串,输出表列);
    例如:
    fscanf(fp,"%d%s",&i,s);
    fprintf(fp,"%d%c",j,ch);

文件定位

移动文件内部位置指针的函数主要有两个,即 rewind 函数和 fseek 函数。

rewind 函数

它的功能是把文件内部的位置指针移到文件首,其调用形式为:
rewind(文件指针);

fseek 函数

用来移动文件内部位置指针,其调用形式为:
fseek(文件指针,位移量,起始点);
其中:

  • “文件指针”指向被移动的文件。
  • “位移量”表示移动的字节数,要求位移量是 long 型数据,以便在文件长度大于 64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。
  • “起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
    其表示方法如下表:
起始点 符号表示 数字表示
文件首 SEEK_SET 0
当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2

文件的随机读写

在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一
个数据据块,因此常用 fread 和 fwrite 函数。


文件检测函数

文件结束检测函数:feof

调用格式:
feof(文件指针);
功能:判断文件是否处于文件结束位置,如文件结束,则返回值为 1,否则为 0。

读写文件出错检测函数:ferror

函数调用格式:
ferror(文件指针);
功能:检查文件在用各种输入输出函数进行读写时是否出错。如 ferror 返回值为 0 表示未出错,否则表示有错。

文件出错标志和文件结束标志置 0 函数:clearerr

函数调用格式:
clearerr(文件指针);
功能:本函数用于清除出错标志和文件结束标志,使它们为 0 值。


附录:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Size 10
/*********二进制方式向文件读写一组数据***********
    * fread(buffer,size,count,fp);
    * fwrite(buffer,size,count,fp);

    buffer:是一个地址,存放从文件读入的数据的存储区的地址
    size:  读写的字节数(读出数据类型的空间)
    count: 读写的数据量
    fp:    指向文件的指针
*************************************************/

struct students
{
    char name[5];
    int age;
    int number;
}stu[Size];

void main ()
{
    FILE *fp;
    int i;
    printf("please input 10 student's data:\n");
    for(i=0;i<Size;i++)
        scanf("%s %d %d",stu[i].name,&stu[i].age,&stu[i].number);
    if((fp=fopen("student data.txt","wb"))==NULL)
        exit(0);
    for(i=0;i<Size;i++)
    {
        if(fwrite(&stu[i],sizeof(struct students),1,fp)!=1)
            puts("sonething wrong!");
    }
    fclose(fp);
}

文章作者: 刺客世家
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 刺客世家 !
 上一篇
Java笔记--基础语法 Java笔记--基础语法
java笔记–基础语法 JDK、JRE与JVM第一个Java程序//这是一个程序第三个单词与文件名必须一样 public class HelloWorld { //第二行是万年不变的方法,代表main方法 //程序的入口,做
2020-08-17
下一篇 
古典问题:兔子总数 古典问题:兔子总数
有一对兔子,从出生第3个月起每个月都生一对兔子,小兔子长到第3月后每个月又生一对兔子。假设所有兔子都不死,编程求第20个月总数为多少?
2020-03-05
  目录