编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

C语言如何操作文件?什么是文件指针??linux C第76讲

gowuye 2024-04-25 04:44 11 浏览 0 评论

文件的定义

在使用电脑的时候,我们经常操作文件。例如,我们可以新建一个.txt类型的文本文件,在里面存放数据。在Windows电脑下,进入一个文件夹,单击右键,选择“新建”---> “文本文档”,如下图:

此时,我们新建一个.txt类型的文本文件。我们可以设置该文件的名称是123.txt,如下图:

然后,我们可以在该文件中存储数据。双击打开123.txt文本文件,然后,输入需要存储的数据,如下图:

最后,单击左上角的“文件”---> “保存”就可以保存文件的数据。该文件保存到硬盘上。例如,上面的例子,创建的123.txt文件就保存到G盘目录下。保存文件之后。此时,在电脑上就新建了一个123.txt文件,文件里存放“aaabbb”字符串信息。

此时,我们通过键盘和鼠标,新建了一个文本文件,并给文件写入数据。那么,我们能否通过软件来自动实现这个功能?

C语言提供了一系列的接口函数,用于操作文件。可以新建一个文件、读写文件的数据。下面我们学习C语言对文件的操作,并结合实际的例子,掌握这些文件操作函数在实际项目中的应用。

2 文件指针的分析

标准C语言提供了fopen(), fread(), fwrite(), fgets(), fputs(), fclose()等函数,用于操作一个文件。假设有123.txt 文件,我们把文件的内容,读取到内存中,有如下的操作流程:

(1) 调用fopen()打开123.txt文件;

(2) 调用fread()函数,从123.txt文件读取数据;

(3) 调用fclose()函数,关闭打开的123.txt文件;

那么,在这个操作流程中,都围绕着一个对象进行,就是fopen()函数返回的文件指针对象。根据fopen()函数的定义如下:

FILE* fopen(const char *path, const char *mode);

该函数返回一个FILE*类型的指针变量,我们称为:文件指针

例如,调用fopen()函数打开123.txt文件,如下:

FILE* fp = NULL; //定义文件指针变量;

fp = fopen("123.txt", "r"); //打开文件,获取返回的文件指针;

调用fopen()函数打开123.txt文件成功之后,就返回一个FILE*类型的文件指针,并赋值给文件指针变量fp,那么,文件指针变量fp指向123.txt文件。

然后,调用fread()函数从fp文件指针读取数据,就是从文件指针fp指向的123.txt文件读取数据。

操作完之后,需要调用fclose()函数来关闭文件指针fp。那么,文件指针fp就不再指向123.txt文件。此时,再调用fread()、fwrite()函数来操作,都不会对123.txt文件有任何影响。

所以,这一系列的文件操作函数,都是围绕FILE*类型的文件指针进行。FILE结构体是标准C语言定义的一个类型,我们不用去理解该结构体的定义,只需要知道fopen(), fread(), fclose()等函数的应用,通过这些函数来实现对文件的操作。

3 文件的操作

对文件的操作,必须调用fopen()函数打开文件,得到一个FILE*类型的文件指针,然后,调用fread()、fwrite()等函数对文件进行读写操作。操作完之后,需要调用fclose()函数关闭打开的文件。

所以,调用fopen()函数打开文件,最后,调用fclose()函数关闭文件。

3.1 打开文件读取数据

C语言提供了fopen()函数,用于打开一个文件,函数定义如下:

FILE* fopen(const char *path, const char *mode);

函数说明:打开 path 参数指向的文件。mode参数是文件打开的模式。根据该模式,以不同的方式打开文件。

返回值:成功返回指向打开文件的文件指针,否则,返回NULL。

参数mode有不同的组合,可以对打开的文件进行不同的操作。该参数的取值如下:

"r" --- 打开一个用于读取的文本文件

"w" --- 创建一个用于写入的文本文件

"a" --- 附加(追加写入数据)到一个文本文件

"rb" --- 打开一个用于读取的二进制文件,字母b是binary表示二进制数据流英文的首字母。

"wb" --- 创建一个用于写入的二进制文件

"ab" --- 附加(追加写入数据)到一个二进制文件

"r+" --- 打开一个用于读/写的文本文件

"w+" --- 创建一个用于读/写的文本文件

"a+" --- 打开一个用于读/写的文本文件

"rt" --- 只读打开一个文本文件,只允许读数据

"wt" --- t(text): 文本文件,可省略不写,只写方式打开或建立一个文本文件,只允许写数据

"at" --- t(text): 文本文件,可省略不写,追加打开一个文本文件,并在文件末尾写数据

"rb" --- 只读打开一个二进制文件,只允许读数据

"wb" --- 只写打开或建立一个二进制文件,只允许写数据

"ab" --- 追加打开一个二进制文件,并在文件末尾写数据

"rt+" --- t(text): 文本文件,可省略不写,读写打开一个文本文件,允许读和写

"wt+" --- t(text): 文本文件,可省略不写,读写打开或建立一个文本文件,允许读写

"at+" --- 读写打开一个文本文件,允许读,或在文件末追加数据

"rb+" --- 读写打开一个二进制文件,允许读和写

"wb+" --- 读写打开或建立一个二进制文件,允许读和写

"ab+" --- 读写打开一个二进制文件,允许读,或在文件末追加数据

打开文件之后,可以调用fread()函数,读取文件数据,函数定义如下:

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

函数说明:函数从stream文件指针指向的文件读取数据,把数据读取到ptr缓存中。读取size个数据块,每个数据块的容量是count个字节。所以,总共读取的字节数是size*count个字节。

返回值:返回成功读取到的数据块个数,注意,不是字节数,是参数size表示的数据块个数。

文件操作完之后,调用fclose()关闭打开的文件。函数的定义如下:

int fclose(FILE *fp);

函数说明:关闭参数fp函数指针,该函数指针是fopen()打开文件所得。所以,打开文件之后,需要关闭该文件。

下面我们编写一个程序,调用C语言提供的API函数,打开一个文件,然后从文件读取数据,最后关闭文件指针。

首先,新建一个test.txt文件,往里面存放 "mylinux.vip" 字符串,操作如下:

echo "mylinux.vip" > test.txt

就是调用echo命令,把"mylinux.vip"字符串输出到test.txt文件中。然后,用cat命令查看该文件的内容,操作如下:


可以看到,test.txt文件存放了" mylinux.vip "字符串。那么,我们就编写程序,读取test.txt文件中的数据。测试代码如下:

调用fopen()函数打开文件的时候,我们只是想对test.txt文件进行读取操作,所以,fopen()函数的第二个参数取值 "r" 字符串,表示进行 read 操作。那么,我们就可以调用fread()函数对打开的文件进行读取操作。通过fread()函数,正确读取到test.txt文件中存放的数据,把数据读取到buf[]缓存中。最后,调用fclose()关闭打开的文件指针。

相关推荐

R语言数据挖掘实践——支持向量机的常用函数
R语言数据挖掘实践——支持向量机的常用函数

e1071包是R语言中用于支持向量机建模与分析的软件包,其主要用于支持向量机的模型构建,提供核心函数svm()来建立支持向量机的基础模型,并且可辅助使用pred...

2024-05-18 12:15 gowuye

R数据分析:如何做聚类分析,实操解析
R数据分析:如何做聚类分析,实操解析

Clusteringisabroadsetoftechniquesforfindingsubgroupsofobservationswi...

2024-05-18 12:14 gowuye

用R语言做数据分析——马赛克图
用R语言做数据分析——马赛克图

到目前为止,我们已经学习了许多可视化定量或连续型变量间关系的方法。但如果变量是类别型的呢?若只观察单个类别型变量,可以使用柱状图或者饼图;若存在两个类别型变量,...

2024-05-18 12:14 gowuye

用R语言做数据分析——方差分析基本概论
用R语言做数据分析——方差分析基本概论

在实际工作中,影响一件事的因素是很多的,我们总是希望通过各种试验来观察各种因素对试验结果的影响。例如,不同的生产厂家、不同的原材料、不同的操作规程,以及不同的技...

2024-05-18 12:14 gowuye

R语言数据分析实战:数据清洗与可视化
R语言数据分析实战:数据清洗与可视化

《R语言数据分析实战:数据清洗与可视化》是一本深入浅出的实践指南,专为对数据分析感兴趣的读者精心编撰。本书旨在帮助读者掌握R语言这一强大的统计分析工具,通过实例...

2024-05-18 12:13 gowuye

用R语言做数据分析——双因素方差分析
用R语言做数据分析——双因素方差分析

在双因素方差分析中,受试者被分配到两因子的交叉类别组中。以基础安装中的Tooth-Growth数据集为例,随机分配60只豚鼠,分别采用两种喂食方法(橙汁或维生素...

2024-05-18 12:13 gowuye

用R语言做数据分析——独立两样本和K样本检验
用R语言做数据分析——独立两样本和K样本检验

coin包简介对于独立性问题,coin包提供了一个进行置换检验的一般性框架,通过这个包,我们可以回答如下问题:响应值与组的分配独立吗?两个数值变量独立吗?两个类...

2024-05-18 12:13 gowuye

用R语言做数据分析——用回归做方差分析
用R语言做数据分析——用回归做方差分析

之前提到方差分析和回归都是广义线性模型的特例,之前文章的所有设计都可以用lm()函数来分析。为了更好地理解输出结果,需要弄明白在拟合模型时,R语言是如何处理类别...

2024-05-18 12:13 gowuye

数据分析R语言——数据结构
数据分析R语言——数据结构

数据分析R语言——数据结构数组数组(array)与矩阵类似,但是维度可以大于2.数组通过array()函数创建。形式如;myarray<-array(v...

2024-05-18 12:13 gowuye

R语言数据挖掘实践——关联分析的常用函数
R语言数据挖掘实践——关联分析的常用函数

arules和arulesViz是R语言中两个专用于关联分析的软件包。其中arules用于关联规则的数字化生成,提供Apriori和Eclat这两种快速挖掘频繁...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——判别分析的常用函数
R语言数据挖掘实践——判别分析的常用函数

判别算法在R语言中实现主要涉及4个软件包中的相关函数,它们依次为MASS、klaR、class和kknn。其中MASS包含有大量实用而先进的统计计数函数及适用数...

2024-05-18 12:12 gowuye

用R语言读取Excel、PDF和JSON文件,终于有人讲明白了
用R语言读取Excel、PDF和JSON文件,终于有人讲明白了

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——聚类分析的常用函数
R语言数据挖掘实践——聚类分析的常用函数

使用R语言可以轻松实现聚类分析,stats、cluster、fpc和mclust是常用的四个聚类分析软件包。stats主要包含一些基本的统计函数,如用于统计计算...

2024-05-18 12:12 gowuye

用R语言做数据分析——时间序列分类
用R语言做数据分析——时间序列分类

时间序列分类是根据已标注的时间序列建立一个分类模型,然后使用分类模型预测未标记时间序列的类别。从时间序列中抽取出新特征肯呢个有助于提高分类模型的性能。特征提取技...

2024-05-18 12:11 gowuye

一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
一文看懂用R语言读取Excel、PDF和JSON文件(附代码)

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:11 gowuye

取消回复欢迎 发表评论: