纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

C语言 文件操作 C语言关于文件的操作方法总结

Ersansui   2021-11-20 我要评论
想了解C语言关于文件的操作方法总结的相关内容吗Ersansui在本文为您仔细讲解C语言 文件操作的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C语言,文件操作,C语言,文件下面大家一起来学习吧

什么是文件

程序文件

其实从文件的功能的角度来说:我们的文件可以分为两种类型的文件:程序文件和数据文件

就拿我们C语言的程序为例子包括了程序文件即后缀为.c的文件目标文件即在windows环境下后缀为.obj的文件可执行程序文件即后缀为.exe的文件

数据文件

数据文件一般指的是用来存储我们在使用应用程序的时候需要读写的数据的文件

而我们讨论的文件的操作也指的是数据文件的操作

文件名

文件名通常由三部分组成:

文件路径+文件名主干+文件后缀

在这里插入图片描述

为什么要使用文件

我们在运行程序的时候总会产生一些数据如果我们不对数据进行存储那么等待程序结束的时候数据就会消失

举个例子:我们上次写过的简易通讯录(简易版通讯录)如果我们这一次运行了这个程序输入了信息但是没有对数据进行保存关闭程序后下次再次运行程序就看不到之前的数据了

而我们想要的是把通讯录的信息记录下来只有我们自己选择删除数据的时候数据才不复存在

而这就涉及到了数据持久化的问题我们一般数据持久化的方法有把数据存放在磁盘文件、存放到数据
库等方式

使用文件我们可以将数据直接存放在电脑的硬盘上做到了数据的持久化

文件的操作

文件缓冲区

C语言是使用“缓冲文件系统”来处理文本文件和二进制文件

缓冲文件系统就是指系统自动地在内存中为程序中每一个正在使用的文件开辟一个“文件缓冲区”、

这个文件缓冲区就相当于一个“中间人”会在程序数据区和硬盘文件中充当一个过渡者的身份

文件指针(FILE)

缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”

每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息(如文件的名
字文件状态及文件当前的位置等)这些信息是保存在一个结构体变量中的该结构体类型是有系统声明的取名FILE.

使用该结构体类型来定义文件指针时需要包含头文件<stdio.h>

需要注意的是不同的C编译器的FILE类型包含的内容不完全相同但是大同小异

每当打开一个文件的时候系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息
我们作为使用者不必关心细节

我们一般都是通过一个FILE的指针来维护这个FILE结构的变量这样使用起来更加方便

FILE* pf;//定义了一个文件指针变量

定义pf是一个指向FILE类型数据的指针变量可以使pf指向某个文件的文件信息区(是一个结构体变量)通过该文件信息区中的信息就能够访问该文件也就是说通过文件指针变量能够找到与它关联的文件

在这里插入图片描述

文件的打开和关闭

我们在对文件进行读写之前应该先打开文件在使用结束之后应该关闭文件

在编写程序的时候在打开文件的同时都会返回一个FILE*的指针变量指向该文件也相当于建立了指针和文件的关系

ANSIC 规定使用fopen函数来打开文件fclose来关闭文件

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );

fopen

在这里插入图片描述

该函数包含在<stdio.h>头文件中用于打开文件的操作

形参列表列表中的第一个参数是文件的名称第二个参数是文件的打开方式

如果打开成功我们就可以用一个文件指针来接收返回值用于管理这个文件如果打开失败就会返回一个空指针

因此我们再接收该函数返回值的时候应该加上一步检验是否为空指针的操作

fclose

在这里插入图片描述

该函数同样包含在<stdio.h>中

当我们使用完文件的时候记得要关闭文件

我们通过fclose函数并把文件指针作为参数传入即可

如果关闭成功该函数就返回0如果关闭失败就会返回EOF(-1)

文件的打开方式

文件有不同的打开方式不同的打开方式对应着不同的操作

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

演示:

#include <stdio.h>
int main()
{
	FILE* pFile;
	//打开文件
	pFile = fopen("myfile.txt", "w");
	//文件操作
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		//关闭文件
		fclose(pFile);
	}
	return 0;
}

我们会看到如果使用的是w的打开方式来使用文件的话程序会在该代码所在源文件的目录下寻找你想要打开的文件如果文件不存在的话就会帮自动帮你创建一个

但是如果使用的打开方式是r如果程序发现所在目录不存在该文件就会出错

例子如下

int main()
{
	FILE* pFile;
	//打开文件
	pFile = fopen("cmyfile.txt", "r");
	//文件操作
	if (pFile == NULL)
	{
		perror("fopen");
		return -1;
	}

	fputs("fopen example", pFile);
	//关闭文件
	fclose(pFile);
	return 0;
}

在这里插入图片描述

当我该源文件的文件夹中并不存在这个文件时就会出错并且我通过了perror这个函数把错误信息打印了出来

需要注意的是就像上面栗子那样只写了文件名.后缀名会默认在该源文件所在的文件下进行查找如果需要指定目录则需要在文件名前面加上文件路径

例如

#include <stdio.h>
int main()
{
	FILE* pFile;
	//打开文件
	pFile = fopen("c:/program/test/myfile.txt", "w");
	//文件操作
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		//关闭文件
		fclose(pFile);
	}
	return 0;
}

注意

在C语言中如果想要输入路径的话我们一般使用斜杠(/),而不使用反斜杠(\)因为反斜杠是转义的标志很有可能你的路径中刚好存在可以转义的内容这样就会导致失败如果要使用反斜杠就要两条反斜杠连在一起用

以上就是我们在使用一个文件的时候的基本操作先要打开文件然后是对文件进行操作最后是关闭文件

流的相关概念

流是个高度抽象的概念我们可以理解为这就相当于时一条通道就像水流一样输入流可以看作一个输入通道输出流可以看作一个输出通道

流这一条通道连接的是程序和外部设备

当外部设备需要把数据输入到程序的时候就需要输入流

当程序需要把数据输出到外部设备的时候就需要输出流

按照我个人的理解

标准输入流就是连接程序和标准输入设备(键盘)的通道

标准输出流就是链接程序和标准输出设备(屏幕)的通道

文件的顺序读写

顺序读写顾名思义就是按照先后顺序来进行读取和写入的操作

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

fputc

在这里插入图片描述

这个函数包含在<stdio.h>中该函数时一个字符一个字符的输入的

第一个参数是我们想要输入的字符第二个参数就是输入流

我们可以这样理解

我们通过这个函数把想要输入的字符放到对应的流中然后这个流会把这个字符送到对应的设备上

如果我们写的是标准输出流那么就会把数据输出到屏幕上我们就可以再控制台看见了

在这里插入图片描述

fgets

在这里插入图片描述

该函数同样包含在<stdio.h>中该函数是从流中获得一个字符

在这里插入图片描述

还有剩下的函数就不一一举例了使用方法都大同小异


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式