找回密码
 立即注册

微信扫码登录

使用验证码登录

搜索
查看: 82|回复: 0

23.第23节课第十章对文件的输入输出

[复制链接]

6476

主题

3

回帖

1万

积分

管理员

积分
19556
发表于 2024-4-15 08:52:49 | 显示全部楼层 |阅读模式
好同学们,大家好,今天呢,我们为大家讲解C语言的新一章的内容就是我们的利用文件保存数据,就是对文件的输入输出。那么,凡是使用过计算机的人呢,都不会对文件呢感到陌生。大多数人接触或使用过文件。比如写好一篇文章,把它放在磁盘上了,以文件的形式保存。用我们的照相机,数码相机照相,每一张照片呢,

就是一个文件。用电子邮件发送的附件就是以文件形式保存的信息,那么我们来看一下文件它的。基本类型。它的一些基本知识。文件呢,有不同的类型。它说文件呢,我们它的名英文名字呢,是我们的file有不同的类型,在C语言程序设计中呢,主要呢用到了两种文件,一种呢称之为程序文件,一种呢称之为。为数据文件,

程序文件包括原程序文件后缀呢,是我们的点c。目标文件后缀列为点o BG。可执行文件后缀为点EXE。这些文件呢?它是用来存放程序的。以便实现程序的功能。另外一种呢,是我们的数据文件,文件的内容呢,不是程序,而是供程序运行时读写的数据。例如,在程序运行过程中,输出到磁盘或其他外部程序,

外部设备的数据或供程序运行时呢?读入内存的数据。比如说一批学生,他的这样一个成绩数据或货物交易的数据。那么,这样一些数据。为了简化。用户对输入输出设备的操作,使用户呢,不必去区分各种输入,输出设备之间的区别,操作系统呢,把各种设备呢,都统一作为文件来处理。从操作系统的角度看,

每一个与主机相连的输入,输出设备呢,都看作一个文件,比如。键盘是我们的输入文件显示屏和打印机,是输出文件文件。一般呢。只存储在外部介质上,数据的集合文件是程序设计中一个重要的概念。一批数据呢,以文件的形式存放在外部介质上,操作系统呢,是以文件为单位。对数据进行管理,也就是说,

如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件。我们然后呢,才能从该文件中呢读取数据。比如说一张音乐光盘,每一首曲子呢,分别是一个文件,找到曲名后呢,才能调出该曲目。要向外部介质上存储数据呢?必须先建立一个文件,以文件名标识才能向它输入数据。输入输出呢,是数据传送的过程数据呢,如何像流水一样呢?

从一处流向另一处。因此呢,常将输入输出形象的称之为流,即输入输出流。流表示了信息呢,从源和目的端的这样一个流动。在输入操作时,数据呢,从文件流向计算机内存在输出操作时。数据呢,从计算机呢流向文件,比如说打印机,磁盘文件,光盘文件。C语言呢,

把文件看作是一个字符的序列,既有一个一个的字符了,它的这样一个字节的顺序组成的这样一个部分。一个输入输出流就是一个字节,或者二进制流,在c文件中字数据呢,由一连串的字符字节组成,中间没有分隔符。对文件的存取呢,是以字节字符为单位,可以从文件读取一个字符或向文件输出一个字符。输入输出的数据流呢?开始和结束仅受程序控制而不受物理符号,比如说回车键盘未换行符的控制,这就增加了处理的灵活性。

这种文件呢,称之为流式文件。那么,接下来我们再看一下文件名,一个文件呢,要有唯一的文件标识,以便用户引用和识识别和引用。文件标识包括三部分,文件路径,文件名主干以及呢,文件后缀。文件路径表示,文件在外部存储设备中的位置,比如说我们这样一个例子d冒号反斜杠CC反斜杠temp反斜杠。file一点到到dat。

我们的这样一个。前面的d冒号。CC.反斜杠temp。它表示,我们的文件路径,我们的file 1表示,我们的文件主干名。文件名主干是我们的文件名主干。dat表这个点后面的dat呢,表示文件的后缀。为了方便起见呢,文件标识常被称为文件名,但一但是呢。哈哈哈。

实际上,这个时候所表示的文件名呢?实际上,包括三部分内容,而不仅是文件名主干。文件名主干的命名规则呢?遵循标识符的命名规则,以后缀来表示文件的性质。比如说我们有这样一些后缀点doc word生成的文件,点TXT文本文件,点CC语言成原程序文件。点CP PC加加源程序文件,还有我们的点PPT电子幻灯文件,点gpg图像文件。文件路径呢?

表示文件在外部存储设备中的位置,文件名主干的命名规则呢?遵循标志符的命名规则。文件后缀用来标示我们的文件性质。我们再来看一下文件的分类,根据数据的组织形式呢,数据文件可以分为文件。和我们的二进制文件ack文件呢?又称为文本文件,它的每一字节呢?存放一个字符的ack代码。二进制文件呢?是把内存中的数据按其在内存中的存储形式呢?原样输出到存盘上,磁盘磁盘上存放字符型数据呢?

只能以acq形式存放数值型数据呢?可以用acq形式呢,存放在磁盘上,也可以用二进制形式存储。那我们数据在内存中呢,是有二进制形式存放的,如果不加。转换的输出到外存呢,就是二进制文件可以认为它是在存储在内存中的数据的映像,也称之为映像文件。如果要求在外存上呢,以acq代码形式存储了,需要在存储前进行转换acq文件呢,称为文本文件,每一个字节呢。

存放一个字节的acq代码字符,一律以acq的形式存放数值数据呢?既可以acq的形式存放,也可以呢?以二进制的形式存放。用acq码输入输出时呢?我们的字节与字符呢?一一对应一个字节呢?代表一个字符。因而呢,便于对字符进行逐个处理,以便于输出数字字符,但一般占存储空间较多,而且需要花费转换时间,用二进制形式输出数据呢,

可以节省外部存储空间的这样一个转换时间。把内存中的存储单元中的内容呢,输出到磁盘或其他外部介质上,此时每一个字节呢,并不代表一个字符。接下来我们看一下文件,缓冲区C语言呢,采用缓冲文件系统处理文件。所谓缓冲文件系统呢?是指系统自动的在内存区中为程序,每一个正在使用的文件呢?开辟一个文件缓冲区。从内存向磁盘输入数据了,必先输入到我们内存的缓冲区中,装满我们的缓冲区了,

才一起送到磁盘去。如果从磁盘向内存读入数据,那么第一次。从磁盘文件将一批数据输入到内存缓冲区中,然后再从缓冲区呢,足够的将数据呢送入到程序存储数据区及程序变量。那么,缓冲区的大小呢?由各个具体的c编译系统确定。那么这样呢,是为了节省存储时间,提高效率,缓冲区的大小由这个具体的c编译系统去确确定。我们来看一下每一个文件呢,在我们的。

内存中只有一个缓冲区,再向文件输出数据时,它就作为输出缓冲区,再从文件读入数据时呢,它就作为输入缓冲区。我们来看一下文件类型,指针在缓冲文件系统中关键的概念呢,是文件类型,指针简称文件指针。每个。被使用的文件呢,在内存中都开辟有一个相应的文件信息区。用来存放文件的有关信息,比如说文件的名字状信,文件状态以及当前的位置。

这些信息呢,保存在一个结构体变量中,该结构体变量呢,是由系统声明的取名为file。不同的c编译系统的file信息呢?包含的内容并不完全相同,那么但大部分呢?那么是一样的,这样一个运用的部分。我们来看一下定义file结构。其类型的信息包含在头文件sddl点h当中。程在程序中呢,可以直接使用file类型定义变量。每一个file类型变量呢?对应一个文件的信息区,

其中呢,包含该文件的有关信息。我们来看一下。该结构体的是系统的,这样一个类型,这样一个定义部分。type struct short level unsigned flag scharf d unsigned char hold short besides unsigned char buffer.on signed charcoal cur p.on sight is temp.short taken.token file.那么,这里呢,是一种c编译环境提供的s gd i连续头文件中这样一个。文件类型的这样一个声明部分,

它定义一个新的这样一个。类型。我们可以呢,定义文件类型指针,比如说file新fp,它是定义一个指向file类型数据的指针变量。我们可以呢,使fp呢指向某一个文件的信息区,它是一个结构体变量,通过该文件信息中的信息呢,就能访问该文件,也就是说通过文件指针变量呢,能够找到与它相关联的文件。如果有n个文件呢,就应该设置n个。

指针变量。分别指向n个five类型变量,以实现对n个文件的访问。那么,为了方便起见呢,通常将这种指向文件信息区的指针变量呢,简称为指向文件的指针变量。指向文件的指针变量呢?并不是指指向外部基础上的数据文件的开头,而是指向内存中文件信息的开头。那么,接下来我们看一下打开与关闭文件。对文件读写之前呢,应该打开该文件。在使用结束后呢,

应该关闭该文件。打开和关闭了。是比较形象的说法,而是比如说打开门才能进入房子门,关闭就无法进入一样,实际上呢,所谓的打开。是指为文件建立相应的信息区,用来存放文件的信息和文件。缓冲区用来存放暂时输入输出的这样一个数据。在编写程序时,打开文件时呢,一般都指定一个指针变量指向该文件,也就是说建立起指针变量与文件之间的联系。这样呢,

就可以通过该指针变量呢对文件进行读写,所谓的关闭是指撤销文件信息区和文件缓冲区。是文件指针变量了,不再指向该文件,那么这样呢,就无法进行文件的读写。我们可以用f open函数呢,打开数据文件,我们用标准的输入输出函数。f open来实现打开文件f open函数的调用方式呢?那么通常为。f open文件名。使用文件方式,那么我们看一下,比如说我们这样一个例子file新fp,

这是定义一个指向文件的指针变量fp。fp=open aer。它是将f open的函数值呢?返回给指针变量p,那么这里呢?表示a1呢?表示打开要打开名字为a1的文件。使用文件的方式为读入r代表read,就是读入f open的函数的返回值啊,是指向ae文件的指针,也就说ae文件信息区的起始地址。通常呢,将file of open的函数的返回值呢,赋予给一个指向文件的指针变量。好吧,

这是我们的这样一个文f open,打开数据函数的文数据文件的这样一个方式,比如说我们的。file he fp fp=fopen aer。这样呢f和就和fp就和文件a1相联系了,或者说fp指向了a1文件。那么可以看出。在打开一个问件文件时呢编译系统呢通知编译系统以下这些三个信息,因为第一个要打开的文件名。也就是说,也要准备访问的文件的名字,第二种,第二个信息要使用文件的方式就是是读还是写?第三个信息要让哪一个指针变量呢?指向打开的文件,

那么这是我们的。通知编译系统的三个信息。我们来看一下使用文件的方式。使用文件的方式呢?由我们的r只读。它的含义呢,是为了输出输入数据,打开一个已存在的文本文件,如果指定的文件不存在了,那么就是就会出错。那么,还有我们的w只写为了输出数据,打开一个文本文件,如果指定文件不存在了,那么就建立新文件。

还有a追加向文本文件呢,尾部添加数据,那么如果指定的文本不存在了,那么就出错。还有rb只读为了输入数据,打开一个二进制文件,如果指定的文件不存在了,那么就出错还。还有WB只写为了输入输输出数据,打开一个二进制文件,如果指定的文件不存在了,那么就建立新文件。还有AB追加。向二进制文件尾的添加数据,如果指定的文件不存在了,

那么就出错,还有r加读写。为了读和写,打开一个文本文件,如果指定的文件不存在了,那么就出错,还有w加读写。为了读和写,建立一个新的文本文件,如果指定的文件不存在了,那么就会出错,另外呢,还有我们的a加读写,为了读和写,打开一个新文文,

一个文本文件。如果指定的文件不存在了,那么就会出错,还有rb加读写为了读和写呢,打开一个二进制文件,如果指定的文件不存在了,那么就会出错,还有WB加。读写为了如何写了建立一个新的二进制文件,如果。指定的文件不存在了,建立就建立新文件。还有AB加为了读和写。打开一个二进制文件,如果指定的文件不存在了,

那么就会出错。我们来看一下。这些使用的这样一个部分。用r方式打开的文件呢?只能用于向计算机输入数据,而不能用作向文件的输出数据。而且该文件呢,已经存在并存有数据这样程序呢,才能从文件中呢读取数据。不能用r方式呢,打开一个并不存在的文件,否则出错,那么第二种用w方式呢,打开的文件只能用于向该文件写数据,那么就是输出文件。

而不能用来向计算机输入,如果原本不存在文件呢?则在打开文件前呢?建立一个以指定名字命名的文件。如果原来已存在一个以该文件命名的文件呢?则在打开文件前呢?先将该文件删去。然后重新建立一个新的文件。第三种,如果希望向文件末尾添加新的数数据,那么不希望删除原有数据了,则应该用a方式打开,此时应该保证了该文件已存在。否则将得到出错的信息在每个数据文件中呢,自动设置一个影视的文件读写位置标志,

它指向的位置呢,就是当前读写的这样一个位置。如果文件读写位置标志了,在文件开头这下一次的读写呢,就是在文件开头的位置。然后文件读写位置标志呢,自动移到下一个读写位置,以便读写下一个数据,以添加方式呢,打开文件时呢,文件读写位置标志呢,移到文件末尾。另外呢,用r+w+a加的方式呢?打开的文件既可以用来输入数据,

也可以用来了输出数据。第五个,如果不能实现打开的任务f open函数呢,会带回一个空指针到。比如说我们来看一下这样一个一个打开文文件,打开一个文件的常用方法。if fp等于。fopen file er=log啊,prin to printf cannot open this file exist 0。那么,这就是说如果呢?我们的fp呢,那么以打开FL,以以r的形式啊,打开f1这样一个。

文件它的方式呢?它的是一个空值带回的,是一个空带回的,是一个空指针,那么它就是那么等于now,那么就是那么。不能实现打开的这样一个任务的,这样一个部分,那么就实现运用这样一个运行的,这样一个部分。那么c标准呢?建议用。这些列出的文件使用方式呢?打开文本文件或者二进制文件,但目前使用的有些cdna系统呢?

可能不完全提供这些功能,那么需要注意所用系统的规定。那么,有12种使用文文件使用方式,其中六种呢,是在第一个字母前面,后面呢,加了字母b的。那么b表示,二进制方式,其实呢,带b和不带b了,只有没有这个b了,只有一个区别,就是对换行的处理。

在由于C语言中呢,有一个反斜杠n呢,就可以实现换行,而在Windows系统中呢,为了实现换行,必须用回车和换行两个字符,比如说反斜杠r和反斜杠n。因此呢,如果使用的是文本文件,启用w方式打开的时候呢,向遇在在向文件输出时输出时遇到换行符返向n。系统就把它转换为返程r和返程r两个字符,否则在Windows系统中查看文件时呢,各行连成一片,无法阅读。

同样的,如果有文本文件启用r的方式打开了,从文件读入时遇到反信号r和反信号n两个连续的字符就。就把它转换为一个字n反向一个字符。如果使用是二二进制文件,那么在向文件读写时呢,不需要这种转换,用加b来表示什么是二进制文件系统呢,就不进行转换。那么,如果用WB的方式使用了文件使用方式了,那么并不意味着输入文件输出时呢?把内存中的。a这个形式保存的数据呢?自动转换为二进制形式存储输出的数据呢?

是由程序中采采用什么样的读写语句决定的。比如说用fsc anf和f printf,按照h的方式来进行输入输出,而Fred和Fred函数呢,只是按二进制的进行输入输出。程序中呢,可以使用三个标准的流文件。标准输入流,标准输出流和标准出错,输出流系统呢,已对这三个文件呢进行了与终端的对应关系。标准输入流呢,是从终端的输入标准输出流呢,是向终端的输出标准输出输错输错输出流呢,是当程序输出错时呢。

将向出错信息发送到终端程序开始时呢,运行的系统呢,自动到打开这三个标标准流文件。那么我们再来看一下用f close函数关闭数据文件,在使用完一个文件后呢?应该关闭它,以防呢,它再被使用。关闭就是撤销文件的信息区和文件缓冲区,使文件的指针变量呢,不再指向该文件,比如说文件指针变量呢与文。不再与文件联系,此后呢,不能再通过指针呢,

与原来的信息相联系的文件呢,进行操作,除非再次打开,使指针变量呢,重新指向该文件。我们的关闭超数据文件的操作呢,就是f close后面写上一括号当中写上文件的指针,比如说我们这样一个例子flow f close off p。那就是用flow f close函数呢?关闭数据文件,如果不关闭数据文件呢?结束程序运行时呢?将会丢失数据。因为呢,向文件写数据时呢,

事先将数据呢输出到缓冲区,在缓冲区充满后呢,才正式输出给文件。如果当数据未满,未充,未充满缓冲区使程序运行结束,就可能使缓冲区中的数据丢失。用f close函数呢?关闭文件时,先把缓冲区中的数据呢?输出到磁盘文件,然后才撤销文件信息区。有的编译系统呢,在程序结束前呢,会自动的向缓冲区中的数据呢,

写到文件。从而避免了这个问题。那么但是呢,我们还是呢需要在。运用我们这样一个在程序终止前的关闭所有文件,那么使用这样一个方式f close函数呢?要改回一个值当成功关闭了执行的关闭操作时啊。返回值为零,否则呢,返回值为uf负一。接下来我们看一下顺序读写顺数据文件。那么,怎么样向文件读写字符呢?读写一个字符的函数由我们的f gets。fg etc以以及呢fp utc。

调用的形式呢,是f get cfp和f put CC hfp,它的功能呢?fgetc hfp呢?是从fp指向的文件中呢?读入一个字符,如果读成功了,则带回所读的字符。失败则返回文件结束,标志EU f及负一。那么f put CC hh p的这样一个fp的这样一个作用呢?是把字符ch写到文件指针变量fp所指的文件中。如果输出成功,返回值了,就是输出的字符输出失败,

则返回e of就是负一。fg etc的第一个字母f呢代表文件file中间的get代表获取最后一个字母c呢表示卡字符character。fg etc呢,就是表示从文件读取一个字符,那么put c呢,就表示了向。将我们的字符呢写到文件指令变量所指的文件当中。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5432考试网 ( 蜀ICP备2022024372号|川公网安备51152402000101号 )|网站地图

GMT+8, 2024-5-19 18:21 , Processed in 0.075479 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表