c语言流式读入单个字节,C语言----文件

文件分类:

1,文件内容——程序文件(目标文件,源文件,可执行文件)和数据文件

2,文件组织形式——顺序存取文件和随机存取文件

3,文件存储形式——ASCII码文件和二进制文件

读文件与写文件:

读文件:将磁盘中的文件传送到计算机内存的操作

写文件:从计算机内存向磁盘文件中传送数据的操作

构成文件的基本单元与流式文件:

c语言中是将文件卡看做是由一个一个的字符(ASCII)或字节(二进制文件)组成的,将这种文件称之位流式文件

文件类型(FILE):

系统为每个打开的文件都在内存中开辟了一个区域,用于存放文件的有关信息,(文件名,文件位置),这些信息保存到一个结构体类型变量中,这个结构体类型由系统定义,取名为FILE

结构体类型名必须大写(FILE)

ASNIC的缓冲文件系统:

系统自动在内存区为每个正在使用的文件开辟一个缓冲区

从内存中向磁盘文件中输出数据时,必须先输出到缓冲区中,待缓冲区中的数据满后,再一起输出到磁盘文件中去

从磁盘文件中向内存读入数据的时候,首先将一批数据读入到缓冲区中,在从缓冲区中将数据逐个送到程序数据区

文件的打开与关闭:

对文件进行操作之前必须先打开该文件,使用结束后,应立即关闭,以免数据丢失

fopen()函数打开一个文件:

用法:

FILE *fopen("文件名","操作方式");返回一个指向文件的指针,如果不能实现打开指定文件的操作,则返回一个NULL

(1)文件名,是指要打开或要创造的文件的名字,如果这里使用的是字符数组或字符指针,则不加双引号

一般写法:

if((fp=fopen(“文件名”,“操作方式”))==NULL){

printf(“error!”);

exit(0);

}

fclose()函数关闭一个文件:

用法:int fclose(FILE *文件指针);

功能:关闭文件指针所指向的文件,如果正常关闭,则返回0,否则返回非0

例如:

fclose(fp);//关闭fp所指向的文件

文件的读写操作:

1,读写文件中的一个字符:

把一个字符写到文件中——fputc();

用法:int fputc(字符数据,文件指针);

功能:将字符数据输出到文件指针所指向的文件中去,同时将读写位置的指针向前移动1个字节如果输出成功,则函数返回值就是输出的字符数据,否则,返回一个符号常量EOF

代码:

FILE *fp;

if((fp=fopen("D:/1.txt","w"))==NULL){

printf("error!");

exit(0);

}

char ch;

while(1){

ch=getchar();

if(ch=='@'){

break;

}

fputc(ch,fp);

}

fclose(fp);

结果:

7f7e1bc3d0e500faa9d8a6beacf4f7fc.png

从文件中读取一个字符——fgetc()函数和feof()函数

int fgetc(“文件指针”);

功能:从文件指针所指向的文件中,读入一个字符,同时将读写位置的的指针向前移动一个字节,该函数没有出错返回值。

EOF,在ASCII码文件执行读入操作的时候,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF,在对二进制文件执行读入的时候,必须使用feof()来判断是否遇到文件尾。

代码:

FILE *fp;

if((fp=fopen("D:/1.txt","r"))==NULL){

printf("error!");

exit(0);

}

char ch;

for(;(ch=fgetc(fp))!=EOF;){

putchar(ch);

}

fclose(fp);

结果:

fbebfeb6b627110b9790b8202d7baa47.png

int feof(文件指针)

功能:在执行读文件的时候,如果遇到文件尾,则返回1,否则返回0;feof()函数同时适用于ASCII和二进制文件。

for(;!feof(fp);){

ch=fgetc(fp);

putchar(ch);

}

2,读写文件中的一个字符串:

int  fputs(字符串,文件指针);

功能:指定文件输出的一个字符串,同时将读写位置的指针向前移动“字符串长度”个字节,如果输出成功,返回0,否则返回非0;

代码:

FILE *fp;

char a[80];

if((fp=fopen("D:/1.txt","w"))==NULL){

printf("error!");

exit(0);

}

gets(a);

fputs(a,fp);

fclose(fp);

结果:

b7b85159ac3e7536f2cf40ee05027c68.png

char *fgets(指针,串长度+1,文件指针);

功能:从指定文件中读入一个字符串,存入“字符数组/字符指针中”,并在末尾自动加一个‘\0’结束标志,同时将读写位置的指针向前移动“字符串长度”个字节。

如果在读入规定长度之前遇到文件尾EOF或换行符,读入结束

fgets(a,strlen(a)+1,fp);

puts(a);

3,读写一个数据块:

一次读写一个数据块:

int fread(void *buffer,int size,int count,FILE *fp);

int fwrite(void *buffer,int size,int count,FILE *fp);

从fp所指向的文件的指针位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中,同时将读写位置指针向前移动size*count个字节。

4,对文件进行格式化读写:

int fprintf(文件指针,“格式符”,输入变量首地址表);

int fprintf(文件指针,“格式符”,输出参量表);

例如:int i=3,float f=9.8;

......

fprintf(fp,"%2d,%6.2f",i,f)

.....

fprintf()函数的作用,将变量i按照%2d的格式,变量f按照%6.2f的格式,以逗号作为分隔符,输出到fp所指向的文件中;

5,读写函数选用原则:

(1)读写一个字符的数据,选用fputc()和fgetc()函数

(2)读写一个字符串的时候,选用fgets()和gputs()函数

(3) 读写一个或多个不含格式的数据的时候,选用fread()和fwrite() 函数

(4) 读写一个或多个函格式的数据时,选用fscanf()和fprintf()函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值