C语言中的文件及相关的操作函数

文件这个名词我相信大家都不陌生,基本就是常用名词,而且指代的范畴很广,比如你的毕业设计,理论等文章、电脑上的各种软件或程序都可以叫文件,不多说反正很广,今天主要讲的文件就是C语言程序设计中很重要的一个概念,不管你是什么程序,当然就要数据处理,而要实现数据处理往往是要通过文件形式来完成,所以首先熟悉与文件处理相关的操作函数是很重要的。

一、文件简述以及处理形式:

“文件"一般是指存储在外部介质中一组相关数据的有序集合,而这个数据集有一个名称,叫做文件名。实际上使用用电脑或在用手机也就是在使用文件。通过文件可以把有用的信息永久保存起来。

所有文件都通过流进行输入输出操作,文件按照编码方式分为文本文件(ASCII码)跟二进制文件(二进制编码方式)。

从用户角度分为普通文件(驻留在磁盘或其他外部介质上的有序数据集)与设备文件(与主机相连的各种外部设备什么显示器、打印机等)。

按照内容分:数据文件、源程序、目标文件、可执行文件等等。

C语言中文件处理形式有两种:缓冲区与非缓冲区两种。

举个例子:如搬砖,你要从A点把砖移动到B点,如果你一块一块的搬,那么既耗时又费力,解决办法是你用一辆推车,按你能力把推车加适量的砖头,然后一起移动到B点,这样效率就高很多,同理要是CPU输出一个字符,磁盘就读取一个,那效率就会很低,而缓冲区的设定,可以有效解决此问题,示意图如下:

缓冲文件读写

至于非缓冲文件很明了,就是系统不会自动为文件操作开辟缓冲区。

二、文件指针:

我们电脑中有若干文件,那么我们如何访问某一特定的文件呢?如何定位该文件呢?这个时候就需要文件指针访问文件了它是指向文件有关信息的指针,比如文件名、当前位置和状态等等,当然这些信息不用说肯定保存在一个结构体变量之中,其声明如下:

文件型结构体

它由系统定义,在头文件stdio.h中。

声明一个文件指针一般形式如下:

FILE *指针变量名。

小编给大家推荐一个学习氛围超好的地方,C/C++交流:三四一六三六七二七!一千多小伙伴了吧!所以看到了快点进来吧,不然就满了!里面资料都是大家贡献的,几百个G了!什么PDF,零基础入门,数据结构, 数据分析都是有视频加源码的。而已里面好多学生,工作了的,遇到bug了可以寻求帮助,遇到解决不了的问题也可以和大家交流,从而解决自己多时的问题。这也是一件乐事,我们不做外包,只为共同进步!

三、打开文件函数-fopen()函数:

fopen()函数用来打开一个文件,其一般形式如下:

fopen()函数一般形式

其中文件名是是要被打开的文件名,当然也可以是文件的路径,如"D:\text.txt",至于文件使用方式那就看下表:

文件使用方式表

如要打开D盘的text.txt文件并且只读属性:

FILE *fp;

fp=fopen("D:\text.txt",”r");

如果文件打开成功则函数指向指定文件的指针,如果打开失败则返回NULL。

四、文件的关闭-fclose()函数:

文件在使用完毕后应该将其关闭,以免因为没有关闭而造成数据流失。关闭文件函数一般形式如下:

fclose(文件指针);

如要关闭上面打开的文件可使用,fclose(fp);

要是关闭成功则返回0,否则返回EOF(-1)。

五、fputc()函数:

该函数的作用是向指定文件中写入一个字符,其一般形式如下:

fputc(ch,fp)

其中ch是要写入文件的字符,fp是文件指针,如果函数输出成功,则返回写入文件的字符,否则返回EOF。

测试程序:

fputc测试代码

输入一个字符'k'输出结果:

可以看到在D盘下a.txt文件中出现了k。

六、fgetc()函数:

先一般形式为:

int fgetc(文件指针)

该函数的作用是从指定文件中读取一个字符,返回值为读取的字符值,如果遇到文件结束符则返回EOF。

测试程序:

fgetc测试程序

结果为:

注意:文件必须以读或读写的方式打开。

七、fputs()函数:

一般形式如下:

int fputs(需要送入流的字符串,文件指针)

其中,第一个参数可以是字符串常量、字符数组名、指针或者变量。

其作用是向指定的文件中写入一个字符串,成功输入返回0,否则返回EOF。

测试代码:

输入i love you!,得出结果:

八、fgets()函数:

其一般形式为:

char *fgets(字符型指针,n,文件指针)

该函数的作用是从指定文件中读取一个字符串到字符型指针指向的内存中,n表示所得字符串中字符的个数。fgets()函数有很多需要注意的地方,现在根据示例一点一点说,首先看一下测试代码:

文件内容

测试结果:

从结果可以看出,我们输入的n=8,输出7个字符,原因就是后面有一个''字符,这是大家都知道的,我们输入的n小于文件中第一行字符的个数,要是我们输入的数大于第一行的字符个数会产生什么结果呢?测试一下吧,从输入中发现,光比第一行字符数大1,结果不变,当我们输入大于等于28时(至少2时)结果发生了变化,结果如图:

居然自动换行了?奇怪!其实文件本身后面就有一个换行符,用来保存的字符串数组中的字符后两个元素是' '与'',所以产生了换行。当然要是你想继续读取下一行,你只有在上面的程序中在加一句fgets语句或循环,因为fgets函数不管要求读取的数有多么大,它只读取一行,检测到换行符就结束。当然,要是你需要读取的长度小于第一行长度时,文件的指针会偏移到当前读完的字符之后的位置,下次调用fgets函数时,会继续读取该位置之后的字符串。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180305A0C8YN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券