【C语言】文件操作

对文件的理解

什么是文件

文件就是电脑C盘里存放东西就叫文件,从功能上我们会把文件分为二种:

  • 程序文件
    程序文件分为三种:源程序文件(后缀为.c)
    目标文件(windows环境后缀为.obj)
    可执行程序(windows环境 后缀为.exe)
  • 数据文件
    数据文件就是我们在运行程序所产生的内容或者是读写的数据

而文件的组成又分为三部分:

  • 文件路径
    文件路径是用来表示文件所在的位置
    例如:C:\ Windows \ addins
    上面表示的是:addins 文件在的位置在C盘Windows 文件中
  • 文件名
    文件名就是字面上的意思,文件的名字,用来分别文件里存放的是什么文件或软件
    文件里还可以存放很多的子文件
  • 文件的后缀
    文件的后缀代表的是文件的功能

文件的类型指针

如果想打开一个文件,就会用到文件的类型指针,又叫文件指针(FILE*

  • 文件指针(FILE*
    每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息
    (如文件的名字,文件状态及文件当前的位置等)
    这些信息是保存在一个结构体变量中,该结构体类型是有系统声明的
  • 文件指针(FILE*)的类型申明:
struct _iobuf {
   
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
  • 这是系统里(FILE*)的类型申明,不同的编译器的FILE类型包含的内容不完全相同,但是大同小异
    正常都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

文件指针(FILE*)的使用

正常是 FILE* + 变量名,这样就叫文件指针变量

FILE* pd;

任何一个C程序,运行起来就会默认打开3个流

1、FILE* stdin(标准输入流) ,从键盘上输入数据对应的是 printf

2、FILE* stdout(标准输出流),打印数据到屏幕上对应的是 scanf

3、FILE* stderr(标准错误流)打引错误信息到显示器

流可以理解为输入/输出缓冲区

文件的使用函数

文件的打开(fopen)和关闭(fclose)

文件打开(fopen)函数参数

FILE * fopen ( const char * filename, const char * mode );
  • 第一个参数filename :是要打开文件的文件名
  • 第二个参数mode :是文件要用什么方式进行打开

文件的打开方式:

文件的打开方式 描述 如果文件不存在
“r” (只读) 打开一个已经存在的文本文件,读取数据 出错
“w” (只写) 打开一个文本文件,输出数据 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 建立一个新的文件
“rb”(读取) 输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
“ab”(追加) 向一个二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,新建一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb+”(读写) 为了读和写打开一个二进制文件 出错
“wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

文件关闭(fclose)函数的参数

int fclose ( FILE * stream );
  • 参数stream:是文件指针,文件使用完后一定要fclose关闭,并把文件指针置空。(和 free 使用方法一样)
    如果不关闭文件会导致数据的丢失

文件的打开(fopen)和关闭(fclose)的使用

int main()
{
   
	FILE* pd = fopen("maun.txt", "r");//打开文件
	if (pd == NULL)
	{
   
		perror("fopen");
		return 1;
	}
	//写文件
	........
	//关闭文件
	fclose(pd);
	pd = NULL;
	return 0;
}

文件的顺序读写

文件的顺序读写就是按照一定的顺序进行输入或者输出

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输入流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输入流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输入流
二进制输入 fread 文件
二进制输出 fwrite 文件

使用fgetc输入

fputc功能:只写一个字符
fputc 输出函数的参数

int fputs ( const char * character, FILE * stream );
  • 第一个参数:character:要写入的字符
    第二个参数:stream:指向输出流 FILE 对象的指针

fputc 输出函数的使用:

int main()
{
   
	FILE* pd = fopen("moun.txt", "w");// w 是只写
	if (pd == NULL)
	{
   
		perror("fopen");
		return 1;
	}
	//写文件
	//循环的方式进行写
	for (char i = 'a'; i <= 'z'; i++)
	{
   
		fputc(i , pd);
	}
	//关闭文件
	fclose(pd);
	pd = NULL;
	return 0;
}

结果:

在这里插入图片描述

使用fputc输出

fgetc 输出函数的参数

int fgetc ( FILE * stream );

fgetc 输入函数的使用:
fgetc功能:只读一个字符

int main()
{
   
	FILE* pd = fopen("moun.txt", "r");// r 是只读一个字符
	if (pd == NULL)
	{
   
		perror("fopen");
		return 1;
	}
	//读文件
	char i = fgetc(pd);
	printf("%c\n", i);
	//读第二次
	i = fgetc(pd);
	printf(
  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值