




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文件文件的基本概念8.1常用文件操作的基本函数8.28.1文件的基本概念
计算机信息系统中,根据信息的存储时间,可以分为临时性信息和永久性信息。简单来说,临时信息存储在计算机系统临时存储设备(例如存储在计算机内存),这类信息随系统断电而丢失。永久性信息存储在计算机的永久性存储设备(例如存储在磁盘和光盘)。永久性的最小存储单元为文件,因此文件管理是计算机系统中的一个重要的问题。一般来说,每台计算机都有一个操作系统负责管理计算机的各种资源。操作系统的文件系统负责将外部设备(如硬盘、打印机、光驱等)的信息组织方式进行统一规划,提供统一的程序访问数据的方法。8.1.1文件概述
对于操作系统来说,文件是存储在磁盘上的一个信息序列,操作系统为这个信息序列起一个名称,这个名称就叫做文件名(或文件标识符)。由于文件存储在外存中,外存的信息相对于内存来说是海量的,而且出于安全、规范的角度,不能够允许程序随意使用外存的信息,因此,当程序要使用文件时必须向操作系统申请使用,操作系统按规则授权给程序后程序才可以使用,使用完毕后,程序应该通知操作系统。8.1.1文件概述缓冲区:是在内存中开辟的一段区域,当程序需要从外存中读取文件数据时,系统先读入足够多的数据到缓冲区中,然后程序对缓冲区中的数据进行处理。当程序需要写数据到外存文件中时,同样要先把数据送入缓冲区中,等缓冲区满了后,再一起存入外存中。所以程序实际上是通过缓冲区读写文件的。数据存储缓冲区从C语言的角度看,文件实际上是一个存储在外存中的由一串连续字符(字节)构成的任意信息序列,即字符流。C程序需要按照特定的规则去访问这个序列。C语言中的文件是逻辑的概念,除了大家熟悉的普通文件外,所有能进行输入输出的设备都被看做是文件,如打印机、磁盘机和用户终端等。8.1.1文件概述终端文件中有3个文件是特殊的,每个C程序都用到。这3个文件是:标准输入文件(stdin)对应键盘,标准输出文件(stdout)对应终端屏幕,标准出错信息文件(stderr)对应终端屏幕。这3个文件对所有的C程序都是自动设置和打开的。当程序调用getchar()和scanf()时,就是从标准输入文件(键盘)读取信息;调用putchar()和printf()就是向标准输出文件(屏幕)输出信息。8.1.1文件概述8.1.2文件的类别对于操作系统来说,文件就是一个由字节为单位的信息流序列。如果将C语言涉及的所有数据存储在文件中,必然有一个约定规则。一个整数存储在文件中可以有多种方式。如整数28036存储在文件可直接存储2个字节0x0B和0x14,也可以直接存储它的正文方式——‘2’、‘8’、‘0’、‘3’、‘6’。前者称为二进制方式,后者称为文本方式(亦称正文方式)。1.文本文件文本文件是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息,包括能用ASCII码字符表示的回车、换行等信息外,不能存储其他任何信息,因此文本文件不能存储声音、动画、图像、视频等信息。文本文件是把数据当做一个一个字符存储起来的相应码值,在采用ASCII码的计算机系统中存放的就是字符ASCII码,可见文本文件具有以下的特点:(1)方便人工阅读,并且可以直接采用编辑工具输入、阅读、修改文本文件的数据。(2)文本文件存储数据无需太多的规定,可以将简单类型的数据直接写入到文本文件中,对于结构等非简单数据存储到文本文件中就必须逐个分量读写。(3)内存中的数据存储形式和存储到文本文件中的数据存储形式不一致,因此所有需要存储到文本文件中的数据必须先转换为文本,这本身需要时间。1.文本文件2.二进制文件
文件作为信息存储的一个基本单位,根据其存储信息的方式不同,分为文本文件(又名ASCII文件)和二进制文件。如果将存储的信息采用字符串方式来保存,那么称此类文件为文本文件。如果将存储的信息严格按其在内存中的存储形式来保存,则称此类文件为二进制文件。二进制文件是按照数据的二进制代码形式直接存入到文件中,二进制文件的特点:(1)直接将字节流写入文件,方便快捷。不需要作过多的转换,节约时间、空间。(2)存放到二进制文件中的数据代码和内存中的数据代码是一致的。(3)可以存储任意内存数据,只需要将数据作为一块二进制序列即可。2.二进制文件
8.1.3文件指针在C语言中定义了一个结构体数据类型FILE来描述文件信息,在“stdio.h”中具体的定义如下:typedefstruct{shortleve1;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;8.1.3文件指针在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。引入FILE类型之后,就可以定义文件指针了。定义说明文件指针的一般形式为:FILE*指针变量标识符;其中FILE应为大写,它是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。例如:FILE*fp;表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。8.1.4文件的操作流程C语言对缓冲文件系统的使用是通过一系列库函数来实现,读写文件必须遵循一定的步骤。C程序打开文件C程序对文件进行读写操作系统判断 C程序发出关闭命令
操作系统关闭文件
文件操作合法
文件操作合法 C程序打开失败执行C其它语句文件的使用流程
一般来讲,以f开头的函数均为文件处理函数。文件处理函数可以分为如下几类:1)文件打开与关闭函数;2)文件读写函数;3)文件定位函数;4)文件状态跟踪函数。8.1.4文件的操作流程8.2常用文件操作的标准函数标准C定义了文件库函数的原型在<stdio.h>头文件中。本节介绍文件的打开、读写及关闭函数。8.2.1文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。1.打开文件
在C语言中,除了3个标准文件外的所有文件在读写前都必须显式的打开。文件的打开操作是通过fopen()函数来实现的,此函数的声明在“stdio.h”中,函数原型如下:FILE*fopen(constchar*filename,constchar*mode);函数返回值——FILE类型指针。如果运行成功,fopen返回文件的地址,否则返NULL。2.关闭文件
在C语言中,文件的关闭是通过fclose()函数来实现。此函数的声明在“stdio.h”中,函数原型如下:intfclose(FILE*fp);函数返回值——int类型,如果为0,则表示文件关闭成功,否则表示失败。fclose()函数的作用是关闭已经打开的文件,要求操作系统将文件句柄fp所代表的文件系统进行关闭。【例8.1】打开名为“aa.txt”的文件,并向文件输出字符串“hello”,然后关闭文件,同时在屏幕上输出fc1ose的返回值。
8.2.2文本文件的读写文件打开之后,就可以进行读写操作。文件的读写操作通过一组库函数实现,分为读函数和写函数。常用的读写函数分为如下几类:1.字符的读写2.数值的读写3.格式化读写4.块的读写5.字符串的读写1.字符的读写fputc()函数的作用是从当前文件位置开始向文件输出一个字符函数形式参数说明如下:intc——准备输出的字符。FILE*stream——文件地址,为FILE*类型变量。函数返回值——int类型。如果返回值为-1(EOF),则表示字符输出失败,否则返回值为c,即与输出的字符相等。fgetc()函数的作用是从当前文件位置读取一个字符函数形式参数说明如下:FILE*stream——用读写模式和只读模式打开的文件地址,为FILE*类型变量。函数返回值——int类型。如果返回值为-1,表示已经读到文件末尾,否则返回读到的字符。【例8.2】从键盘读取一行字符,并输出到“test.txt”文件中,再把该文件内容读出显示在屏幕上。
1.字符的读写2.字符串的读写fgets()函数的形式参数如下:char*s——有效内存地址,以便可以存储从文件读取的字符串。intn——读取字符串的长度,确定从文件中读取多少个字符。实质上,此函数从文件中读取n-1个字符到当前的字符串中,然后自动添加字符串结束符‘\0’。但是如果此文件中一行长度小于n,则到此行的换行符为止,并将此换行符读取到字符串中。FILE*stream——文件地址fputs()函数的形式参数如下:constchar*s——有效的字符串,此字符串中不包括‘\n’。intn——字符串长度。实质上,在向文件输出信息时,并不输出‘\0’。FILE*stream——文件地址。函数返回值——整型数据,如果函数运行成功,则返回0;否则返回EOF。【例8.3】从test.txt文件中读入一个含10个字符的字符串。【例8.4】在例8.2中建立的文件test.txt中追加一个字符串。3.块的读写文件输入输出函数中还提供了块的输入输出函数,即将内存中的一段信息作为一个整体进行输入输出操作,其在“stdio.h”中的函数原型如下:size_tfread(void*ptr,size_tsize,size_tn,FILE*stream);size_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream);其中size_t在“stdio.h”中的定义如下typedefunsignedsize_t;【例8.5】从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。fread()函数从fp指向的二进制文件中,读入count个大小为size个字节的数据块到buf所指向的内存中。如果执行成功,则返回实际读取的数据块的个数。例如,从已经打开的文件指针fp所指向的文件中读入10个长整数到数组longa[20]中,这10个数依次存储到a[9]开始的10个元素位置。3.块的读写fwrite()函数从buf所指向的内存中,读入count个大小为size个字节的数据块写入到fp指向的文件中。如果执行成功,则返回实际写入的数据块的个数。例如,将长整数数组a[20]的前10个元素写入文件f中。if(fwrite(a,sizeof(long),10,f)!=10)printf(”文件写出现错误!\n”);3.块的读写4.格式化读写1.fprintf()函数函数的意义是:将省略号表示的位置列出的表达式的值计算出来后,按mode中指定的格式输到有fp指向的文件中。2.fscanf()函数函数的意义:从fp指向的文件中,按mode中指定的格式逐个读取文本数据转换成指定的数据类型,附给对应指针指向的存储单元中。【例8.6】用fscanf和fprintf函数完成例8.5的问题。8.2.3文件的随机访问与定位文件可以理解为一个完整的数据流,因此可以将“数据流”分为文件头、文件尾和文件主体三个部分。在C语言中通过FILE类型指针描述文件流的位置,因此FILE类型指针又称为文件指针。在缺省情况下,文件的读取是按顺序进行的。在完成一段信息的读写之后,文件指针移动到其后的位置上准备读取下一次读写。在特殊情况下,需要对文件进行随机的读写,即读取当前位置的信息后,并不读取紧接其后的信息,而是根据需要读取特定位置处的信息。为了满足文件的随机读写操作,C语言中提供了文件指针定位函数。1.文件定位函数fseek()函数原型:intfseek(FILE*stream,longoffs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国有光人字提花布数据监测报告
- 新疆第二医学院《中国传统文化与中医》2023-2024学年第一学期期末试卷
- 2025届河北省金太阳-邢襄联盟高三上学期开学考(25-05C)-化学试题(含答案)
- 2025年中国斜挂袋市场调查研究报告
- 2025年中国数字式现场录像机市场调查研究报告
- 2025-2030年中国丁苯喹嗪行业前景调查及未来风险评估报告
- 2025至2031年中国美味金枪鱼罐头行业投资前景及策略咨询研究报告
- 肇庆市实验中学高中历史三:第课孔子与老子教案
- 2025至2031年中国纳米罗马杆行业投资前景及策略咨询研究报告
- 新疆生产建设兵团一师高中2025届高三毕业班联考数学试题试卷含解析
- ISO13485质量管理手册
- 辩论赛PPT模板模板
- 发电厂贮灰场突发环境事件应急预案
- 2023年高考全国乙卷作文“一花独放不是春百花齐放春满园”写作
- 建材公司质量管理手册(模板范文)
- 钳工中级知识培训课件
- GB/T 42706.2-2023电子元器件半导体器件长期贮存第2部分:退化机理
- 高考语文新题型+“文学短评”相关写作(真题+技法+练习)
- 幼儿园小班数学活动《认识里外》教学PPT课件【幼儿教案】
- 国开【形考】《管理英语(3)》形成性考核1-8答案
- 2023学年完整公开课版用户思维
评论
0/150
提交评论