310 likes | 431 Views
8.1 文件概述. 第八章 文件. 8.2 文件打开、关闭与处理函数. 8.3 顺序文件. 8 .4 随机文件. 8 . 5 二进制文件. 8 . 6 文件系统控件. 8 . 7 文件系统操作语句. 8.1.1 文件概念. 程序在运行时所所处理的数据,根据其生存周期与存储介质通常分为二类: 一类是只存储在内存中的工作数据; 另一类数据是记录了程序的运行结果,并且需要在以后的程序运行或其它软件中重复使用。 对于后一类数据,需要通过文件对其进行保存。. 8.1.1 文件概念.
E N D
8.1 文件概述 第八章 文件 8.2文件打开、关闭与处理函数 8.3顺序文件 8.4 随机文件 8.5二进制文件 8.6文件系统控件 8.7文件系统操作语句
8.1.1 文件概念 • 程序在运行时所所处理的数据,根据其生存周期与存储介质通常分为二类: • 一类是只存储在内存中的工作数据; • 另一类数据是记录了程序的运行结果,并且需要在以后的程序运行或其它软件中重复使用。 • 对于后一类数据,需要通过文件对其进行保存。
8.1.1 文件概念 • 在计算机系统中,文件被定义成具有符号名(文件名)在逻辑上具有完整意义的有序数据集合,它被保存在磁盘、光盘等外部存储器中,由操作系统进行统一管理,用户通过文件名对其进行访问。
8.1.2文件逻辑结构 • 在操作系统中,文件的逻辑结构分为字节流式与记录式。VB的随机文件属于记录式结构,而顺序文件与二进制文件在本质上都属于字节流式结构。 • 在记录式文件内数据被划分为多个记录。记录是一种具有特定意义的数据单元,它被进一步划分为若干个字段。一个字段由若干个字节组成,对应于某一VB标准数据类型,表示记录的一个数据项。如以下学生学籍记录由学号、姓名、性别、出生日期、家庭地址等字段组成。 • 字节流式文件是由字节或字符序列组成的文件,其内部不再划分结构,因此字节或字符是其基本的数据访问单位。
8.1.3 VB文件类型 • VB文件的类型有两种划分方法: • 一种是按存取方式与逻辑结构分为顺序文件、随机文件和二进制文件。 • 另一种是按编码方式划分为ASCII码文件和二进制编码文件。 • 顺序文件属于ASCII码文件,而随机文件和二进制文件同属于二进制编码文件。
8.1.3 VB文件类型 • 顺序文件 • 顺序文件在VB中专门用于处理以ASCII形式存储的文本文件,即顺序文件是字符流式文件。 • 顺序文件的最大缺点在于在对文件修改时,必须将所有文件字符读入内存,修改后再将修改结果写入文件。 • 顺序文件既可用于存储文字信息,也可存储表示数值的数字,但在存储数字时会比二进制文件占用更多的空间,因为每个数字都要按字符串存储。
8.1.3 VB文件类型 2. 随机文件 一种可进行随机读写的记录式文件。所谓“随机”,是指在这种文件中,对任意位置的记录的访问,都只须一次磁盘操作就可完成,而无须访问它前面的记录。 在同一个随机文件的逻辑结构中,每个记录都分配有一个记录号,所有的记录都由相同的字段组成并具有相同的字节长度。记录中的空白字段也必须占据空间,因此会造成一定存储空间的浪费 。
8.1.3 VB文件类型 3.二进制文件 一种以二进制编码存储的字节流式文件,它可以字节为单位进行快速存取,并可避免随机文件中的空间浪费,但由于不存在记录结构,文件数据的逻辑意义与存储位置,都完全需要编程者自己进行解释与控制。
8.1.4 文件操作步骤 VB的三类文件的操作都有着相同的步骤: 1. 打开文件 这是文件操作的第一步,由Open语句完成,一个文件只有执行打开命令后,才能对其进行读写。在VB中,文件的建立也隐含在文件的打开操作中,即当用户试图打开一个不存在的文件进行写或追加操作时,系统将自动为其新建该文件。 2.读写文件 文件的写入与读出,又统称为文件访问或文件存取。文件读写是文件操作的核心与目的。 3.关闭文件 当程序不再使用文件时,应立刻执行关闭语句,以便释放相关的系统资源。
8.1.5 文件指针 • 用户每打开一个文件,系统都会为其生成并维持一个文件指针,用来指示用户对文件的下一个操作位置,其作用类似于字处理软件中的光标。该指针对用户来说是不可见的,但确实存在,并对文件操作的理解有着非常大的帮助。对于大多数的文件打开方式,文件打开时文件指针指向文件的开始位置,并可随用户的文件访问而自动后移。对于顺序文件和二进制,文件指针的移动单位为字节,对于随机文件移动单位为记录号。 • 在程序中,用户无法直接操纵文件指针,但可以通过Seek()函数与Seek语句返回或移动文件指针的当前值。
8.2.1 文件的打开 • 所有类型文件的打开或建立都使用Open语句,Open语句的完整格式如下: Open “文件名”[For 打开方式] [Access 存取类型] [锁定] As [#]文件号 [Len=记录长度] Open 语句的语法包括以下几个部分:
8.2.2 文件的关闭 所有文件关闭操作都使用相同的Close语句,其格式为: Close [文件号列表] 说明:(1)Close的作用是关闭已打开的文件,同时释放文件在打开时所分配的缓冲区与文件号。 (2)Close语句可以同时关闭多个已打开的文件。如Close #1,#2,#3,表示同时关闭文件号为1、2、3的三个已打开文件。 (3)若省略文件号列表参数,则将关闭 Open 语句打开的所有活动文件。 (4)程序在退出时,会自动将所有尚未关闭的文件实施关闭操作。 (5)顺序文件的写操作只是简单地写入内存中的缓冲区,仅当缓冲区满或在文件被关闭时,才将缓冲区中的数据写入磁盘文件。 (6)Close语句也可以过程的形式执行,即:Close(文件号列表)
8.2.3 文件处理函数与语句 2.Seek语句 格式:Seek 文件号,指定位置 功能:在 Open语句打开的文件中,设置下一个读/ 写操作的位置,即移动文件指针。
8.3.1 顺序文件的写操作 1. Print #语句 格式:print #文件号,[输出列表] 说明:(1)Print #语句与前面窗体或图形框、打印机控件中的Print方法非常相似。该语句的作用是将过去输出到屏幕或打印机中的数据,转而输出到指定的文件中。 (2)Print # 语句在将输出列表中的最后一个字符写入文件后会插入一个新行字符,即回车换行符(Chr(13) + Chr(10))。 (3)系统会在Print#语句输出的同时自动移动文件指针,从而确保多条Print#语句的输出结果在文件中按顺序排列,而不是相互覆盖。 (4)文件号为在Open语句中指定过的,与某个顺序文件相关联的有效编号。 (5)输出列表可以指定多个输出项,其格式与Print方法中的基本相同。当省略该参数时,Print #语句将在顺序文件中输出一个空行。 (6)通常用 Line Input #读出 Print # 在文件中写入的数据。
8.3.1 顺序文件的写操作 2.Write # 语句 格式:Write #文件号,[输出列表] Write # 语句与 Print # 语句的作用与用法基本相同。二者的不同之处在于,当要将数据写入文件时,Write # 语句会自动对数据项进行分隔与标识,比如,它会在数据项之间插入逗号,并自动给字符串加上双引号,给日期型与逻辑型数据两边加上“#”号。因此,在使用Write # 语句时,没有必要在输出列表中使用额外的分界符与定位函数Tab()。
8.3.2 顺序文件的读操作 1、Line Input #语句 格式:Line Input #文件号,字符串变量 说明:(1)Line Input #语句的作用为:从已打开的顺序文件中读出一行并将它分配给一个字符串变量。 (2)顺序文件中的回车换行符 (Chr(13) + Chr(10))不会被输入到字符串变量中。 (3)顺序文件的一个数据行如由多个数据项组成,Line Input #语句不区分数据项的分隔符与界定符,而将它们全部作为字符内容输入到变量中。 (4)Line Input #语句通常与Print #语句配对使用,即用Line Input #语句来读取由Print#语句写入的顺序文件。
8.3.2 顺序文件的读操作 2、Input #语句 格式:Input #文件号,变量列表 说明:(1)从已打开的顺序文件的当前操作位置,按变量列表中变量的个数,顺序读出一个或多个数据项,并把它们赋给对应的变量。 (2)Input #语句读取数据的单位是数据项,而不是文本行,而且每条语句允许读出多个数据。文件中数据项的分隔符有空格、回车换行符、逗号、双引号(界定字符串数据)、“#”号(界定逻辑型与时期时间型数据)等。 (3)变量列表参数中的变量允许有多个,并且可以是任意数据类型,而不仅仅局限于字符串变量。但要求Input #语句在执行时,文件当前位置顺序存在着与变量列表相符合的数据项序列,既要个数相符,又要类型相符。 (4)为了正确读出数据,Input #语句一般只与Write#语句配合使用,即Input #语句只从由Write#语句写入的文件中读取数据。
8.4 随机文件的访问 8.4.1 定义记录类型 在一个随机文件中,所有的记录都必须有着相同的结构和长度,因此为了确保正确地访问随机文件,首先要使用自定义类型语句Type,根据随机文件记录的字段结构,定义一个相关的数据类型,然后使用该数据类型的变量访问随机文件。例如,对记录由“学号”、“姓名”、“成绩”三个字段组成的随机文件,可为该文件的访问,自定义如下结构的数据类型: Type StudentType Number As String*12 Name As String*10 Score As Integer End type 为确保文件访问时记录等长,自定义数据类型中的字符串元素必须给出确定的字符长度。
8.4.2 随机文件的写操作 随机文件的写操作是通过Put #语句完成的,格式为: Put # 文件号,[记录号],变量名 说明:(1)Put #语句的作用为:将指定变量中的数据,按给定的记录号,写入已打开的随机文件中。 (2)记录号为大于或等于1的整数。如记录号参数省略,则在文件指针的当前位置处写入。 (3)语句中的变量必须为自定义的记录类型。 (4)当记录号指向文件中一个已存在的记录时,该记录中的原有数据将被覆盖;当指向一个不存在的记录时,系统将新建该记录,若新建记录号与原有记录号不连续,系统会在已有记录与新建记录间插入足够的空白记录。
8.4.3 随机文件的读操作 随机文件的写读作通过Get #语句完成的,格式为: Get # 文件号,[记录号],变量名 说明:(1)Get #语句的作用为:从已打开的随机文件中,将指定的记录读出,并将其赋给指定的变量。 (2)记录号为大于或等于1的整数。如记录号参数省略,则读入文件指针指向的记录。记录号省略时,其对应位置的逗号不能省。 (3)语句中的变量必须为自定义的记录类型。 (4)当记录号指向文件中一个并不存在的记录时,不会出错,而是返回一个空白记录给变量。 (5)文件中已存在的记录数计算公式为: 记录数=文件长度/记录长度 其中,文件长度可由内部函数LOF(文件号)获得,记录长度可由内部函数Len(记录变量)获得。
8.5 二进制文件的访问 读语句格式 Get # 文件号,[开始位置],变量名 写语句格式 Put # 文件号,[开始位置],变量名 说明:(1)对于以二进制方式打开的文件,Get #语句的作用为:按指定变量的长度从指定的位置开始连续读取文件数据,并将其赋给指定的变量。 (2)对于以二进制方式打开的文件,Put #语句的作用为:将指定变量中的数据,写入二进制文件的指定的位置。 (3)如开始位置参数省略,则从当前文件指针指向的位置开始读或写数据。 (4)读写语句中的变量可以是任意类型。 (5)Put #与Get #语句,在对以二进制方式打开的文件进行操作时,文件数据的定位单位为字节,而不是记录号。
8.6.1 文件系统控件简介 1.驱动器列表框 • 功能:用于显示用户系统中所有有效磁盘驱动器的列表。 • 关键属性Drive:返回或设置用户在列表框上的当前选择的驱动器,默认值为应用程序所在的驱动器。为只读属性,只在运行时可用,在设计时不可用。 • 关键事件Change:当Drive属性发生改变时触发。 2.目录列表框 • 功能:从最高层开始显示指定驱动器的目录结构。 • 关键属性Path:设置或返回列表框中的当前目录的路径,默认值为应用程序所在的驱动器。为只读属性,只在运行时可用,在设计时不可用。 • 关键事件Change:当Path属性发生改变时触发。
8.6.1 文件系统控件简介 3.文件列表框:用于显示指定目录中的所有文件 • 关键属性: (1)Path属性:设置列表框中所显示文件的当前目录的路径,默认值为应用程序所在的目录。 (2) Pattern (模式)属性:通过文件类型通配符,设置目录中可显示文件的子集,如设置该属性的值为“*.txt”后,表示在文件列表框中只显示文本文件,默认值为“*.*”显示所有文件。为只读属性。 (3)FileName属性:返回或设置用户在列表框上所选中的文件名及其路径,为只读属性。 • 关键事件: (1)Change事件:当Path属性发生改变时触发。 (2)Click事件:当用户在列表框中选中某个文件时触发。
8.6.2 文件系统控件的组合 1.驱动器列表框与目录列表框的关联 在驱动器列表框的 Chang事件过程中添加如下代码: Private Sub DriveListBox_Change() DirListBox.Path= DriveListBox.Drive End Sub • 上述赋值语句左边的DriveListBox.Drive表示引用驱动器列表框中所选定的驱动器,赋值语句右边的DirListBox.Path表示设置要在目录列表框中显示目录结构的驱动器符号。 • 整个事件过程的作用为:当用户在驱动器列表框中改变所选定的驱动器盘符后,目录列表框将同步显示该盘符的目录结构。
8.6.2 文件系统控件的组合 2.目录列表框与文件列表框的关联 在驱动器列表框的 Chang事件过程中添加如下代码: Private Sub DirListBox_Change() FileListBox.Path=DirListBox.Path End Sub • 上述赋值语句左边的DirListBox.Path表示引用目录列表框中所选定的目录,赋值语句右边的FileListBox.Path表示设置要在文件列表框中显示文件的目录路径。 • 整个事件过程的作用为:当用户在目录列表框中改变所选定的目录后,文件列表框将同步显示该目录中的所有文件。
8.7 文件系统操作语句 1.ChDrive语句 格式:ChDrive 驱动器盘符 功能:改变当前默认的驱动器。 说明: (1)盘符参数为单个字母的字符串,如:“D”、“E”等,如超过一个字符,则后面的字符将被忽略。 (2)要求改变当前驱动器后,在文件操作语句中可省略驱动器的指定,如: ChDrive “C” ‘将当前驱动器改为C盘 Kill “\work\score.dat” ‘被删文件在C盘的Work目 录下
8.7 文件系统操作语句 2.MkDir语句 格式:MkDir 目录名 功能:建立目录。 说明:目录名参数为包含新建目录路径的字符串,如果省略路径,则在当前目录下新建目录,如: MkDir MyWork ‘在当前目录下新建一个MyWork文件夹
8.7 文件系统操作语句 3.ChDir语句 格式:ChDir 目录名 功能:改变当前默认目录。 说明: (1)目录名参数为包含目录路径的字符串。 (2)按要求改变当前目录后,在文件操作语句中可省略路径的指定,如: ChDir “C:\work” ‘将当前驱动器改为C盘 Kill “score.dat” ‘被删文件在C盘的Work目录下
8.7 文件系统操作语句 4.RmDir语句 格式:RmDir 目录名字符串 功能:删除指定的目录。 说明: (1)目录名参数为一个包含路径的字符串。 (2)只能删除空目录,被删目录中若有文件存,必须先清空,如: Kill “C:\Work\*.*” ‘清空C盘下的Work目录 RmDir “C:\work” ‘删除C盘下的Work目录