千家信息网

C语言中文件操作方法有哪些

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍了C语言中文件操作方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是文件程序文件其实从文件的功能的角度来说
千家信息网最后更新 2024年11月22日C语言中文件操作方法有哪些

这篇文章主要介绍了C语言中文件操作方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

什么是文件

程序文件

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

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

数据文件

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

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

文件名

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

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

为什么要使用文件

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

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

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

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

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

文件的操作

文件缓冲区

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

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

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

文件指针(FILE)

缓冲文件系统中,关键的概念是"文件类型指针",简称"文件指针"。

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

使用该结构体类型来定义文件指针时,需要包含头文件

需要注意的是,不同的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

该函数包含在头文件中,用于打开文件的操作。

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

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

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

fclose

该函数同样包含在

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

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

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

文件的打开方式

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

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

演示:

#include 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 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

这个函数包含在中,该函数时一个字符一个字符的输入的。

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

我们可以这样理解

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

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

fgets

该函数同样包含在中,该函数是从流中获得一个字符。

感谢你能够认真阅读完这篇文章,希望小编分享的"C语言中文件操作方法有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

文件 数据 程序 输入 函数 输出 指针 时候 二进制 信息 变量 字符 方式 就是 类型 系统 结构 设备 通道 缓冲 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 快速制作数据库软件 拨打电话说无法连接到服务器 网络安全部队是什么 如何取消数据库安全密码 数据库添加字段控制范围 佳发流媒体服务器 小度怎么连上服务器 数据库 对字段加密解密 mac网络安全密钥是什么 软件开发5年后还能考研吗 侯进录数据库常用技术手册 测控网络技术考试0 网络安全板报四年级的 中兴通讯上海软件开发怎么样 eps数据库目前数据总量 网络安全故障应急演练方案 亳州手机软件开发要多少钱 关于增加超融合服务器的请示 杨浦区项目数据库服务商服务费 成都瑞庭网络技术怎么样 web服务器与其它线程通信 涉外网络安全态势分析 网络安全法66条司法解释 湖州酷娱网络技术有限公司 最服务器租用 直播服务器要什么样的 数据库系统编程图解 网络技术开发计算机软件开发 昆明学网络技术的培训 笔记本电脑服务器地址怎么查询
0