C语言中的文件

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();
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值