1、1,第十一章 文件,2,本章重点:,掌握文件系统的基本概念; 掌握文件系统控件的使用; 掌握顺序文件、随机文件以及二进制文件的特点和使用; 掌握对在应用程序中不同类型文件的打开、关闭和读写操作。,3,11.1 VB文件概念,文件是存储在外部介质上的以文件名为标识的数据的集合。 存储在磁盘上的文件称磁盘文件 与计算机相连的设备称为设备文件,4,1.文件的结构 文件是信息的集合,这些信息又可以直接看成被计算机处理的数据。为便于文件的读写,将相互关联的数据集合到一起作为一条记录。 一个文件由一条或多条记录组成,一条记录又由一个或多个数据项(即字段或域)组成。 2.文件的分类 按数据的性质,文件分为程
2、序文件和数据文件,程序文件用来存放计算机可执行的程序,包括源文件和可执行文件;按存取方式和结构,文件可分为顺序文件和随机文件; 按数据的编码方式,文件可分为ASCII文件和二进制文件。,5,按照文件的存取方式和组成,把文件分为以下三类: 1.顺序文件(Sequential File) 结构比较简单,文件中的数据是按顺序组织的文本行,每行即为一个数据记录,每行长度可以变化,行之间以换行符作为分隔符。 2.随机文件(Random Access File) 由一组长度完全相同的记录组成。记录与记录之间不需要分隔符号。一般以二进制形式存放,每个记录包含一个或多个字段。可以按任意次序读写。 3.二进制文
3、件(Binary file) 最原始的文件类型,它直接把二进制码存放在文件中,没有固定的格式。二进制访问模式以字节数来定位数据,允许在程序中按任何方式组织和访问数据,占用空间较小,存取灵活。,6,11.2 文件系统控件,VB6.0提供可直接浏览系统目录结构和文件的3大文件系统控件,即: 驱动器列表框(DriveListBox) 目录列表框(DirListBox) 文件列表框(FileListBox),7,驱动器列表框(DriveListBox ,实例默认名Drive1) Drive属性 作用:返回或设置运行时选择的驱动器。该属性在设计时不可用。 使用格式: Object.Drive = 其中:
4、Object为对象表达式,其值 是驱动器列表框对象的名称。 示例:Drivel1.drive=“C: “ Change事件 当选择一个新的驱动器或通过代码改变Drive属性的设置时都会触发驱动器列表框的Change事件发生。,8,目录列表框(DirListBox,实例默认名Dir1) Path属性 用于返回或设置当前路径。该属性在设计时不可用。 使用格式:Object. Path = 其中:Object为对象表达式,其值是目录列表框对象的名称。 示例:Dir1.Path=“F:VB98“ Change事件: 当选择一个新的目录或改变当前目录,即改变目录列表框的Path属性的设置时,都会触发目录
5、列表框的Change事件发生。,9,文件列表框(FileListBox,实例默认名File1) 文件列表框用于将文件定位并列举出来,显示所选择文件类型的文件列表。,10,FileName属性不包括路径名,故通常采用文件列表框的Path属性值和FileName属性值字符串联接的方法来获取带全路径的文件名。 例: If Right(File1.Path, 1) = “ Thenfname$ = File1.Path & file.FileName Elsefname$ = File1.Path & “ & File1.FileName End If,11,文件列表框的主要事件和发生时机,文件系统控
6、件联动,见例11-1,12,11.3 顺序文件,顺序文件的打开与关闭 打开顺序文件 在对文件进行任何操作之前,必须先打开文件,同时通知操作系统对文件进行读操作还是写操作。 格式: Open 文件名 For 模式 As # 文件号 Len=记录长度 其中,文件名可以是字符串常量,也可以是字符串变量 (1)“模式”为下列三种形式之一: Output:对文件进行写操作。 Input:对文件进行读操作。 Append:对文件末尾追加记录,使原有内容不被擦除,新记录加在其后。,13,注意:使用Output方式打开一个存在的文件,将会创建一个新的顺序文件,磁盘上原有的同名文件将会被覆盖,其中的数据将全部丢
7、失。 (2)文件号是一个介于1511之间的整数。当打开一个文件并为它指定一个文件号后,该文件号就代表文件,直到文件被关闭后,此文件号可以再被其它文件使用。,14,关闭顺序文件 关闭文件所用的语句是Close。 格式:Close #文件号,#文件号 例如:Close #1,#2,#3 是关闭1号,2号和3号文件的命令。如果省略了文件号,Close命令将会关闭所有已经打开的文件。,15,顺序文件的读写操作 写操作 Print # 语句 格式:Print # , 其中,文件号为以写方式打开的文件号,输出列表为用分号或逗号分隔的变量、常量、空格和定位函数序列。 Write # 语句 格式:Write
8、# , 其中,文件号为以写方式打开的文件号,输出列表为只用逗号分隔的数值或字符串表达式。,16,Write #语句与Print # 语句比较:Write # 的功能基本上与Print # 语句相同,不同的是,数据写入文件时是以紧凑格式存放的,也就是说,使用Write # 语句,数据项之间会以 “,”自动隔开,并自动给字符串加上双引号。 Write # 语句在将输出列表中的最后一个字符写入文件后会插入回车换行符。 例:112,17,注意: 当结束读写操作以后,必须要将文件关闭,否则会造成数据丢失。因为实际上Print # 或Write # 语句是将数据送到缓冲区,关闭文件时才将缓冲区中数据全部写
9、入文件。 如果写入文件的数据将来还要用Input # 语句读出,那么在写数据时,就要使用Write #语句而不要使用Print # 语句。因为Write # 语句自动地将各个数据域自动地分隔开来,确保了每个数据域的完整性,保证了以后还能用Input # 语句正确地读出数据。,18,读操作 顺序文件读文件的操作方式有如下三种: Input # 语句 Line Input # 语句 Input 函数 Input # 语句 格式: Input # , 功能:从已打开的顺序文件中依次读出数据,并分别赋给指定的用逗号分隔的变量列表中的变量。变量的类型与文件中的数据的类型要求对应一致。,19,Line I
10、nput # 语句 格式: Line Input # , 功能:从已打开的顺序文件中读出一行数据,并赋给字符串变量。 Line Input # 语句从文件中逐字符地读出数据,直至遇到回车符Chr(13)或回车换行符(Chr(13)Chr(10))为止。回车换行符将会被跳过,不会附加在字符串变量中。,20,Input函数 格式:Input $ ,# 功能:调用该函数可以读取指定数目的字符,以字符串形式返回。,21,与文件读操作有关的其他重要函数 LOF()函数 LOF()函数将返回文件的字节数。例如,LOF(1)返回 # 1文件的长度,如果返回0,则表示该文件是一个空文件。 EOF()函数 EO
11、F()函数将返回一个表示文件指针是否达到文件末尾的值。当到文件末尾时,EOF()函数返回True,否则返回False。对于顺序文件用EOF()函数可以测试是否到文件末尾。对于随机文件和二进制文件,当最近一个执行的Get语句无法读到一个完整记录时返回True,否则返回到False。 LOC()函数 LOC()函数将返回在一个打开文件中读写的记录号;对于二进制文件,它将返回最近读写的一个字节的位置。 例:11-3,11-4,22,11.4 随机文件,随机文件的打开与关闭 打开随机文件 Open 文件名 For Random As # 文件号 Len=记录长度 其中:文件名可以是字符串常量,也可以是
12、字符串变量。文件以随机访问模式打开后,可以同时进行读或写的操作。在Open语句中要指明记录的长度,记录长度的默认值是128个字节。 例如,用随机方式打开D盘根目录下MyDoc文件夹中的MyData1.txt文件,记录长度为100个字节: Open “D:MyDocMydata1.txt “ For Random As #1 Len=100 关闭随机文件 与关闭顺序文件相同,仍用Close语句。,23,随机文件的读写操作 写操作 随机文件的写操作使用Put 命令 。 格式:Put # , 其中:指定写到文件中的的几个记录上。如果省略,则表示在当前记录后插入一条记录。记录号应为大于1的整数。是要写
13、入文件的数据,可以是变量。 Put 命令将表达式的值写入由记录号指定的记录位置处,同时覆盖原记录内容。随机文件的操作不受当前文件中的记录数的限制。,24,读操作 随机文件的读操作使用Get命令。 格式:Get # 文件号, ,变量名 Get命令将指定的记录内容存放到变量中。记录号为大于1的整数。如果省略记录号,则表示读取当前记录。 Seek()函数和Seek语句 Seek()函数返回一个长整型数,在Open语句打开的文件中指定当前的读、写位置。 Seek语句设置下一个读、写位置,其使用格式为:Seek #文件号,位置。 说明:对随机文件来说,位置是指记录号。,25,11.5 二进制文件,打开与关闭二进制文件 打开文件 格式:Open文件名For Binary As # 文件号 注意:以二进制方式访问文件不指定记录长度。 关闭文件 关闭打开的二进制文件仍用Close命令。,26,二进制文件的读写操作 写操作 格式: Put , 功能:Put命令从指定的字节数后开始,一次写入长度等于变量长度的数据,如果忽略,则表示从文件指针所指的当前位置开始写入。 读操作 格式:Get ,, 功能:Get命令从指定位置开始读取长度等于变量长度的数据,并存放到变量中,如果省略位置,则从文件指针所指的位置开始读取,数据读出后移动变量长度的位置。 例:11-6,