C版本中使用的有两种对文件处理的方法:
缓冲文件系统:指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存想磁盘输入数据,必须先送到内存中,缓冲区装满后才一起送到磁盘。以下介绍均为缓冲区文件系统。
非缓冲区文件系统:系统不自动开辟确定大小的缓冲区,由程序为每个文件设定缓冲区。
UNIX系统下,用缓冲区文件系统处理文本文件,用非缓冲区文件系统处理二进制文件。
文件类型指针FILE:
typedef struct{
short level; //缓冲区空或满的程度
unsigned flags; //文件状态标志
char fd; //文件描述符
unsigned char hold; //如无缓冲区不读取字符
short bsize; //缓冲区大小
unsigned char *buffer; //数据缓冲区的位置
unsigned ar *curp; //指针,当前的指向
unsigned istemp; //临时文件,指示器
short token; //用于有效性检查
}FILE;
定义文件型指针变量如:FILE *fp;
文件的打开,fopen函数。
fp=fopen(文件名,使用文件方式); //使用文件方式包括只读只写,读写(w+)等。
文件的关闭:fclose函数。顺利关闭返回0,否则饭后-1;
文件的读写:fputc函数和fgetc函数。fread函数和fwrite函数。
举例:
1.从键盘输入一些字符,逐个把他们从到磁盘上,知道输入#结束。
void main(int argc,char *argv[])
{
FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{printf("cannot open the file\n");exit(0);}
ch=getchar(); //接受换行符
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
ch=getchar();
}
fclose(fp);
}
2.将一个磁盘文件中的信息复制到另外一个磁盘文件中。
void main(int argc,char *argv[])
{
FILE *fpin,*fpout;
char ch,filein[10],fileout[10];
scanf("%s",filein);
scanf("%s",fileout);
if((fpin=fopen(filein,"r"))==NULL)
{printf("cannot open the file\n");exit(0);}
if((fpout=fopen(fileout,"w"))==NULL)
{printf("cannot open the file\n");exit(0);}
while(!feof(fpin))
{
fputc(fgetc(fpin),fpout);
}
fclose(fpin);
fclose(fpout);
}
3,使用fread和fwrite函数,从终端输入,转存到文件中。
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)//
#define NULL 0
#define SIZE 2
struct student
{
char name[10];
int num;
int age;
}stud[SIZE];
void save()
{
FILE *fp;
int i;
if((fp=fopen("stulist.txt","wb"))==NULL)
{printf("cannot open the file stulist\n");exit(0);}
for(i=0;i<SIZE;i++)
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1)printf("error\n");
fclose(fp);
}
void main(int argc,char *argv[])
{
int i=0;
while(i<SIZE)
{
scanf("%s%d%d",&stud[i].name,&stud[i].age,&stud[i].num);
i++;
}
save();
}