12.5周记

本文详细介绍了文件的类型,包括程序文件和数据文件,以及它们的特点。重点讲解了文件指针的概念,它在缓冲文件系统中的作用,以及如何通过文件指针进行文件操作。同时,阐述了文件的打开与关闭方法,如'r'、'w'、'a'等模式,并展示了使用fopen和fclose函数的示例。此外,还详细讨论了如何使用fgetc、fputc、fgets和fputs函数进行文件的顺序读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是文件

(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。

(2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘或其他外部设备的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据 、货物交易的数据等。

特点:

1.文件是用于数据存储的单位。
2.文件通常用来长期存储数据。
3.文件中的数据是以字节为单位进行顺序存储的。

2.文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称文件指针。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息,这些信息保存在一个结构体变量中。

typedef struct{
	short level;         //缓冲区“满”或“空”的程度
	unsigned flags;      //文件状态标志
	char fd;             //文件描述符
	unsigned char hold;  //如无缓冲区则不读取字符
	short bsize;         //缓冲区的大小
	unsigned char *baffer; //数据缓冲区的读写位置
	unsigned char *curp; //指针指向的当前文件的读写位置
	unsigned istemp;     //临时文件,指示器
	short token;         //用于有效性检查
}FILE;

通过文件指针变量能找到与它相关联的文件。如果有n个文件,应设n个指针变量,分别指向n个FILE类型变量,以实现对n个文件的访问。

3.打开与关闭文件

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

(1)用fopen函数打开数据文件

调用方式:fopen(文件名,使用文件方式);

fopen("a1","r");

FILE *fp;      //定义一个指向文件的指针变量fp
fp=fopen("a1", "r");      //用fopen函数的返回值赋给指针变量fp

(2)用fclose函数关闭数据文件

关闭文件用fclose函数,fclose函数调用一般形式为

fclose(文件指针);

例如

fclose (fp);

3.顺序读写数据文件

fgetc函数

调用形式       fgetc(fp)

从fp指向的文件读入一个字符,读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1)

fputc函数

调用形式       fputc(ch,fp)

把字符ch写到文件指针变量fp所指向的文件中,输出成功,返回值就是输出的字符,输出失败,则返回EOF(-1)

#include<stdio.h>
#include<stdlib.h>
int main()
{
 FILE *fp;                                    //定义文件指针fp
 char ch,filename[10];
 printf("请输入所用的文件名:");
 scanf("%s",filename);                       //输入文件名
 if((fp=fopen(filename,"w"))==NULL)
 {
     printf("无法打开此文件\n");
 exit(0);
 }
 ch=getchar();
 printf("请输入一个准备存储到磁盘的字符串(以#结束):");
 ch=getchar();
 while(ch!='#')                    //当输入'#'时结束循环
 {
     fputc(ch,fp);               //向磁盘文件输出第一个字符
 putchar(ch);                    //将输出的字符显示在屏幕上
 ch=getchar();                      //再接收从键盘输入的一个字符
 }
 fclose(fp);                       //关闭文件
 putchar(10);            
 return 0;
}

读写一个字符串的函数

fgets函数

调用形式       fgets(str,n,fp)

从fp指向的文件读入一个长度为n-1的字符串,存放到字符数组str中,读成功,返回地址str,失败则返回NULL

fputs函数

调用形式       fputs(str,fp)

把str所指向的字符串写到文件指针变量fp所指向的文件中,输出成功,返回0,输出失败,则返回非0值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值