文件操作(C语言)

文件操作(C语言)

1. 什么是文件

文件 = 文件内容 + 文件属性

在程序设计中,文件分为程序文件和数据文件。

1.1 程序文件

程序文件包含:源文件(.c文件)、目标文件(windows操作系统.obj文件)、可执行文件(windows操作系统.exe文件)

1.2 数据文件

该文件的内容不一定是程序,而是程序运行时读取的数据。


2. 为什么要使用文件

总所周知,内存是具有掉电易失的特性,因此我们需要文件把数据存储起来,因为文件是存储到我们的外设磁盘上,磁盘对数据进行保存具有持久化

2.1 文件特性

【文件特性】

  • 唯一性 唯一性 = 路径+文件名

3.文件打开关闭

3.1 文件指针

在C语言中,进行文件操作时,编译器会自动生成一个文件结构,存放文件的信息。文件结构体会有一个文件指针FILE*,指向该结构。

3.2 文件操作

3.2.1 文件的打开

文件打开需要一个函数FILE* fopen(const char* str,const char* mode),该函数会返回一个文件指针。

注意:对文件进行写入数据,是输出操作,对文件进行读取操作,是输入操作

输出操作解析

就是将数据从内存中数据输出到文件。

输入操作解析

就是将文件中的数据输入到内存中。

【函数参数】

  • 返回类型 FILE , 失败返回空指针 NULL

  • 参数1 文件名或者文件路径

  • 参数2 文件的操作模式

    【文件的操作模式】

操作模式含义具体操作指定文件不存在
“r”只读打开文本文件,进行数据输入出错
“w”只写打开文本文件,进行数据输出创建新文件
“rb”只读打开二进制文件,进行数据输入出错
“wb”只写打开二进制文件,进行数据输出创建新文件
“a”追加打开文本文件,在文件尾部进行数据追加创建新文件
“ab”追加打开二进制文件,在文件尾部进行追加出错
“r+”读写打开文本文件,进行读和写出错
“w+”读写打开文本文件,进行读和写创建新文件
“a+”追加打开文本文件,在文件尾部读写创建新文件
“rb+”读写为了读和写,打开二进制文件出错
“wb+”读写为了读和写,打开二进制文件创建新文件
“ab+”读写打开二进制文件,在文件尾部进行读和写创建新文件
3.3.2 文件的关闭

文件也是数据,所以我们在打开文件的同时应该也要进行对应的关闭文件

【关闭文件函数】

int fcolse(EILE* stream)

函数参数

  • 文件指针

实例代码

#include <stdio.h>

int main()
{
    FILE* pf = fopen("test.txt","w"); //以写的方式进行操作test.txt文件
    if(pf == NULL) //返回空指针说明文件打开失败
    {
        perror("fopen");
        return 1;
    }
    /*进行相关操作*/
    fclose(pf); /*关闭文件*/
    return 0;
}


4. 文件读写

在C语言中,有许多函数接口可以对文件进行操作。接下来,我们一起来学习。

【文件读写函数接口】

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

函数使用介绍文档

4.1演示

【fgetc / fputc】

fputc : 对单个字符进行输出,(可循环使用输出单个字符)

int main()
{
	FILE* pf = fopen("test.txt","w"); /* w */
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fputc('A',pf); /* 将字符A输出到文件中 */

	fclose(pf);

	return 0;
}

执行代码后,打开文件目录下文件test.txt,会发现字符A已经写入进去了。

fgetc:对单个字符进行输入


int main()
{
	FILE* pf = fopen("test.txt", "r"); // r
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	char c = fgetc(pf); /*将文件中字符A输入到内存中,进行获取赋值给变量c*/
	printf("%c ",c);

	fclose(pf);

	return 0;
}

执行代码会在显示屏上打印字符A

【fgets / fputs】

fputs:对文本行进行输出操作

int main()
{
	FILE* pf = fopen("test.txt", "w"); // w
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fputs("hello world\n",pf); /*将字符串 hello world 输出到文件中*/

	fclose(pf);

	return 0;
}

执行代码后,打开文件目录下文件test.txt,会发现字符串 hello word 已经输出到文件中

fgets:对文本行进行都输入操作

int main()
{
	FILE* pf = fopen("test.txt", "r"); // r
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	char str[20];

	fgets(str, sizeof(str), pf); /* 将文件中的字符串 hello world 输入到字符数组中*/
	printf("%s \n",str);


	fclose(pf);

	return 0;
}

执行代码会在显示屏上打印字符串 hello world

【fscanf / fprintf】

fprintf: 对数据进行格式化输出

int main()
{

	char str[20] = "helloworld!!!";
	int num = 10000;
	float f = 3.1415926;


	FILE* pf = fopen("test.txt", "w"); // w
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fprintf(pf,"%s %d %f",str,num,f); /* 将str num f 的数据输出到文件中*/


	fclose(pf);

	return 0;
}

执行代码后,打开文件目录下文件test.txt,会发现变量的数据str num f已经输出到文件中

fscanf:对数据格式化输入

遇到空格和换行会停止读取

struct newtemp {

	char charr[20];
	int i;
	float f;
};


int main()
{

	struct newtemp temp = { 0 };
	FILE* pf = fopen("test.txt", "r"); // r
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	size_t o = fscanf(pf,"%s %d %f",temp.charr,&(temp.i),&(temp.f));

	printf("%s %f %d",temp.charr,temp.f,temp.i);


	fclose(pf);

	return 0;
}
  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值