




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第10章文件的输入和输出,10.1文件的基本知识,10.2打开和关闭文件,10.3顺序读写数据文件,10.4随机读写数据文件,10.5文件读写的错误检测,2,10.1文件的基本知识,10.1.1什么是文件10.1.2文件名10.1.3文件分类10.1.4文件缓冲区10.1.5文件类型指针,3.10.1.1什么是文件?有不同类型的文件。在编程中,主要使用两种文件:(1)程序文件。包括源程序文件(后缀。c)、目标文件(后缀。obj),可执行文件(后缀。exe)等。这个文件的内容是程序代码。4.10.1.1什么是文件?有不同类型的文件。在程序设计中,主要使用两种文件:(2)数据文件。文件的内容不
2、是程序,而是程序运行时可以读写的数据,如输出到磁盘(或其他外部设备)的数据或程序运行时可以读入的数据。如一组学生成绩数据,或商品交易数据等。本章主要讨论数据文件,5.10.1.1什么是文件,前几章处理过的数据的输入和输出,从终端键盘输入的数据,以及输出到终端显示器的运行结果,经常需要将一些数据输出到磁盘上进行存储,这将在以后使用,6.10.1.1什么是文件,操作系统将各种设备统一作为文件对待。从操作系统的角度来看,例如,终端键盘是一个输入文件,打印机是一个输出文件。7.10.1.1什么是文件?“文件”是指存储在外部介质上的数据集合。一批数据以文件的形式存储在外部介质上。操作系统以文件为单位管理
3、数据。如果您想查找存储在外部介质上的数据,您应该首先根据文件名找到指定的文件。然后从这个文件中读取数据。要将数据存储在外部介质上,您必须先建立一个文件(用文件名标记),然后才能将数据输出到该文件。8.10.1.1什么是文件?输入输出是数据传输的过程,数据像流水一样从一个地方流向另一个地方。因此,输入输出经常被形象地称为流,即数据流。流表示从源到目的地的信息流。9,10.1.1什么是文件?当输入时,数据从文件流向计算机内存,当输出时,数据从计算机流向文件。无论是用Word打开或保存文件,还是用C程序输入输出,都是通过操作系统进行的。“流”是一个传输通道,数据可以从运行环境流向程序,也可以从程序流
4、向运行环境。10,10.1.1什么是文件?从C程序的角度来看,无论程序是一次读写一个字符、一行文本还是一个指定的数据区,作为输入输出的各种文件或设备都是以逻辑数据流的形式统一起来的。语言将文件视为一系列字符(或字节)。iostream是字符或字节流(内容是二进制数据)。11,10.1.1什么是文件?其数据文件由一系列字符(或字节)组成,无论行边界如何,两行数据之间不会自动添加分隔符,对文件的访问是基于字符(字节)的。输入和输出数据流的开始和结束仅由程序控制,而不由物理符号(如回车和换行)控制,这增加了处理的灵活性。这种文件称为流文件。12,10.1.2文件名,文件应该有唯一的文件标识,以便用户
5、可以识别和引用它。文件标识包括三个部分:(1)文件路径(2)文件名主干(3)文件后缀,13,10.1.2文件名,文件路径表示文件在外部存储设备中的位置。例如,D: CCtempfile1.dat表示文件1.dat文件存储在d磁盘的CC目录下的temp子目录下,文件路径,文件名主干,文件后缀,14,10.1.2文件名,文件路径表示文件在外部存储设备中的位置。例如,D: CCtempfile1.dat表示文件1.dat文件存储在d盘的CC目录下的temp子目录下,文件名为15,10.1.2,文件路径表示文件在外部存储设备中的位置。例如,D: CCtempfile1.dat表示文件1.dat文件存储
6、在d盘的CC目录下的temp子目录下,命名规则遵循标识符16、10.1.2文件名的命名规则,文件路径指示文件在外部存储设备中的位置。例如,D: CCtempfile1.dat表示文件1.dat文件存储在d盘的CC目录下的temp子目录下,一般不超过3个字母(doc、txt、dat、c、cpp、obj、exe、ppt、bmp等)。)。17、10.1.3文件分类,根据数据组织形式,数据文件可分为数据以二进制形式存储在内存中。如果未经转换就输出到外部存储器,它就是二进制文件。如果需要将其以ASCII码形式存储在外部存储器中,则需要在存储前进行转换。ASCII文件也称为文本文件。每个字节包含一个字符的
7、ASCII码和18,10.1.3文件分类。字符以ASCII形式存储。数字数据可以以ASCII形式或二进制形式存储。如果有一个10000的整数,如果它以ASCII码的形式输出到磁盘,它将占用一个字节(每个字符占用一个字节),而如果它以二进制形式输出,它将只占用磁盘上的4个字节(当使用VC C时)。19,10.1.3文件分类,(1 (0)、(0)、(0)、(0),ASCII形式,二进制形式,(10000),20,10.1.4文件缓冲,ANSI C标准采用“缓冲文件系统”处理数据文件。所谓的缓冲文件系统是指系统自动为存储区中程序正在使用的每个文件打开一个文件缓冲区。21从内存到磁盘的输出数据必须先发
8、送到内存中的缓冲区,然后在缓冲区填满后一起发送到磁盘。如果从磁盘向计算机读取数据,一次将一批数据从磁盘文件输入到内存缓冲区(全缓冲区),然后将数据从缓冲区逐个发送到程序数据区(用于程序变量)、22、10.1.4文件缓冲区、程序数据区和输出文件缓冲区。输入文件缓冲区,磁盘,从内存到磁盘的输出数据,全缓冲区,23,10.1.4文件缓冲区,程序数据区,输出文件缓冲区,输入文件缓冲区,磁盘,从磁盘到计算机的读取数据,全缓冲区,24,10.1.5文件类型指针称为“文件指针”,每个使用的文件在内存中打开一个相应的文件信息区,用于存储文件的相关信息(如文件名、文件状态和文件当前位置等)。),它存储在结构变量
9、中。结构类型由系统声明,命名为FILE,25,10.1.5 FILE类型指针。声明文件结构类型的信息包含在头文件“stdio.h”中。通常,设置指向文件类型变量的指针变量,然后这些文件类型变量被它引用,26,10.1.5文件类型指针,文件* FP1 *,FP2 *。文件f1的文件信息区、fp1的文件信息区、文件f2的文件信息区、fp2的文件信息区、文件f3的文件信息区、fp3的文件信息区、27、10.2打开和关闭文件、10.2.1使用fopen功能打开数据文件、10.2.2使用fclose功能关闭数据文件、以及28、10.2.1使用fopen功能打开数据文件。29,10.2.1用fopen函数
10、打开一个数据文件。当写程序时,当打开文件时,指针变量通常被指定指向文件,也就是说,指针变量和文件之间的连接被建立,使得文件可以通过指针变量被读取和写入。所谓的“关闭”意味着取消文件信息区和文件缓冲区。30、10.2.1使用fopen功能打开数据文件。例如:fopen(“a1”、“r”);意思是打开一个名为“a1”的文件。文件模式是“读入”。fopen函数的返回值是指向a1文件的指针。31,10.2.1用fopen函数打开一个数据文件,通常将fopen函数的返回值赋给指向该文件的指针变量。例如,FILE * fpFP=fopen(“a1”、“r”);Fp与文件a1相关联。fp指向文件a1。32、
11、10.2.1当打开文件时,编译器系统被告知以下三个信息:要访问的文件的名称、使用文件的方式(“读”或“写”)等。),哪个指针变量指向打开的文件,以及使用文件的方式,请参考表10.1。33,描述:(1)以“R”模式打开的文件只能用于向计算机输入数据,而不能用于向文件输出数据,并且文件应该已经存在数据,以便程序可以从文件中读取数据。您不能打开不存在于“r”模式下的文件,否则将会出现错误。34,描述:(2)以“W”模式打开的文件只能用于向文件写入数据(即输出文件),但不能用于向计算机输入。如果原始文件不存在,将在打开文件之前创建一个以指定名称命名的新文件。如果以该文件名命名的文件已经存在,请在打开该
12、文件之前将其删除,然后重新创建一个新文件。35,描述:(3)如果你想在文件的末尾添加新数据(你不想删除原始数据),你应该以“A”模式打开它,但要确保此时文件已经存在;否则,您将收到一条错误消息。当打开文件时,文件读写标记移动到文件的末尾,36。说明:(4)在读写模式下打开的文件可以用来输入数据,也可以用来输出数据。使用r模式时,文件应该已经存在。在W模式下,创建一个新文件,先将数据写入该文件,然后读取该文件中的数据。对于以A模式打开的文件,不删除原始文件,文件的读写位置标记移动到文件的末尾,可以添加或读取。37,描述:(5)如果打开失败,fopen函数将返回一条错误消息。fopen函数将返回一
13、个空指针值NULL,以下列方式打开文件:(FP=fopen(“文件1”,r)=null) printf(“无法打开此文件”);退出(0);终止正在执行的程序,38,描述:(6) C标准建议使用表10.1中列出的文件使用方法打开文本文件或二进制文件,但目前使用的一些C编译系统可能无法完全提供所有这些功能,39,描述:(7)当计算机输入从ASCII文件中读取的字符时,它会遇到回车和换行符,系统会将其转换为换行符,并在输出时将换行符转换为回车和换行符。使用二进制文件时,不进行这种转换,内存中的数据形式与输出到外部文件的数据形式完全一致,一一对应。(8)程序中可以使用三个标准流文件:标准输入流、标准输
14、出流和标准错误输出流。系统指定了这三个文件与终端之间的对应关系。标准输入流是来自终端的输入标准输出流,输出标准错误输出流是在程序出错时向终端发送错误信息。41.当程序开始运行时,系统会自动打开这三个标准流文件。因此,程序员不需要在程序中用fopen函数打开它们。因此,在我们习惯于从终端输入或输出到终端之前,没有必要打开终端文件。42,10.2.2使用fclose函数关闭数据文件,使用fclose函数关闭文件。fclose函数调用的一般形式是fclose(文件指针);例如:fclose (fp)。如果不关闭文件,将会丢失数据。、43、10.3顺序读取和写入数据文件。在顺序写入中,第一个写入的数据
15、存储在文件的前面,第二个写入的数据存储在文件的后面。在顺序读取中,首先读取文件后面的数据。对于顺序读写,读写数据的顺序与文件中数据的物理顺序一致。顺序读写需要通过库函数来实现。10.3.1如何向文件读写字符10.3.2如何向文件读写字符串10.3.3以格式化的方式读写文件10.3.4以二进制方式向文件读写一组数据45,10.3.1如何向文件读写字符,读写字符函数46,示例10.1从键盘输入一些字符并逐个发送它们解决方案:使用fgetc函数从键盘逐个输入字符,以及,47,# include # include int main()FILE * FP;char ch,filename10Print
16、f(请输入使用的文件名:);scanf(%s,文件名);如果(FP=fopen(文件名,“w”)=null)打印(无法打开此文件n);退出(0);ch=getchar();接收最后一个输入回车,输入文件名,只写,添加,48,使用退出功能时打印(“请输入一个字符串(以#结尾):);ch=getchar();当(ch!=#) fputc(ch,FP);put char(ch);ch=getchar();fc lose(FP);put char(10);返回0;49,示例10.2将信息从一个磁盘文件复制到另一个磁盘文件。需要将前面示例中创建的文件1.dat文件的内容复制到另一个磁盘文件文件2.dat。解决问题的思路:处理这个问题的算法是从文件1.dat文件中逐个读取字符,然后逐个输出到文件2.dat文件。50,#包括#包括int main()FILE *输入,*输出;char ch,infile10,outfile10Printf(输入读入文件:的名称);scanf(%s,infile);Printf(输入和输出文件:的名称);scanf(%s ,输出文件);如果(in=fopen (infile, r)=null) printf(此文件无法打开n);退出(0);如果(out=fopen (outfile,“w”)=null)打
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 印刷与教育环境友好型材料探索考核试卷
- 营养健康与过敏性疾病管理考核试卷
- 成长基金管理办法
- 2024年西藏白朗县急诊医学(副高)考试题含答案
- 2024年天津市宁河区普通外科学(副高)考试题含答案
- 政府接待管理办法
- 投产项目管理办法
- 2024年四川省盐边县急诊医学(副高)考试题含答案
- 异地挂职管理办法
- 2024年四川省若尔盖县急诊医学(副高)考试题含答案
- 交通运输绿色低碳发展的中国实践 2025
- 水稻病虫害的识别与防治
- 加速康复外科(ERAS)在骨科护理中的应用
- 建筑证书管理培训
- 百胜中国公司管理制度
- 2025年高考数学试卷(天津)(解析卷)
- 南门精酿啤酒厂管理制度
- (2025)廉政知识题库(附答案)
- 水电二次配管合同范本
- 海外项目工程管理
- 新闻记者职业资格备考资料2025年
评论
0/150
提交评论