对于缓冲文件系统,系统会自动地在内存区为每一个正在使用的文件开辟一个缓冲区。每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件名、文件状态及文件当前位置等)。这些信息保存在一个结构体变量中的。该结构体类型是由系统定义的,取名为FILE。获取内存中存放文件有关信息的结构体指针定义为文件类型指针,通过文件指针变量找到指定的文件,实现对文件的访问。该结构体类型定义在stdio.h中,声明为

typedef struct _iobuf

{

char*_ptr;

int_cnt;//剩余未读的字节数

char*_base;//文件的缓冲基址

int_flag;//打开文件的属性

int_file;//打开文件的编号

int_charbuf;

int_bufsiz;//文件的缓冲的总的大小

char*_tmpfname;

} FILE;


FILE *fp;


fp是一个指向FILE类型结构体的指针变量。可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件,以实现对文件的访问。


文件的读取操作

#include<stdio.h>
#include<stdlib.h>//为了使用exit(0)
#define N 10
void readText(const char *fpath,int array[]);
int main(){
    int a[N];
    int i;
                                                 
  readText("File.txt",a);//读取File.txt的数据
                                               
  for(i=0;i<N;i++)
    printf("%d ",a[i]);
                                                 
    return 0;
}
void readText(const char *fpath,int *array){
    FILE *fp = NULL;
    int loop =0;
                                                 
    if(fpath == NULL || array==NULL) {
        printf("ERROR");
        exit(0);
    }
                                                 
    fp = fopen(fpath,"r"); //打开一个文件
    while(!feof(fp)){ //检测流上的文件结束符,feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
        fscanf(fp,"%d",&array[loop++]);//fscanf 和 scanf 相似 :当能正常读入数据时, fscanf 返回读入数据的个数,否则返回 EOF 。
    }
    fclose(fp);//关闭文件
}

文件的读取

#include<stdio.h>
#include<stdlib.h>
int main(){
    FILE *fp;
    long size;
    char *buff;
    long unsigned int result;
                                          
    fp = fopen("file.txt","r");
    if(fp==NULL){
        printf("error");
        exit(1);
    }
                                          
    fseek(fp,0,SEEK_END);// 指针移到文件末位,fseek(文件类型指针,位移量,起始点)
    size = ftell(fp);// 获得文件长度, ftell函数的作用是得到流式文件中的当前位置
    rewind(fp);//使文件位置指针重新至于文件开头,同时清除和流相关的错误和EOF标记
                                          
    buff=(char*)malloc(sizeof(char)*size);
    if (buff == NULL){
        printf("buff error");
        exit(2);
    }
                                          
    result=fread(buff,1,size,fp);
    if(result!=size){
        printf("read error");
        exit(3);
    }
    //开始操作
    fputs(buff,stdout);
    fclose(fp);
    free(buff);
    return 0;
}

fopen() 打开文件
fclose() 关闭文件
fseek() 改变文件位置指针的位置
Rewind() 使文件位置指针重新至于文件开头
Ftell() 返回文件位置指针的当前值
feof() 若到文件末尾,函数值为真
Ferror() 若对文件操作出错,函数值为真
Clearerr() 使ferror和feof()函数值置零
fgetc()getc() 从指定文件取得一个字符
fputc()putc() 把字符输出到指定文件
fgets() 从指定文件读取字符串
fputs() 把字符串输出到指定文件
getw() 从指定文件读取一个字(int型)
putw() 把一个字输出到指定文件
fread() 从指定文件中读取数据项
fwrite() 把数据项写到指定文件中
fscanf() 从指定文件按格式输入数据
fprintf() 按指定格式将数据写到指定文件中