第10章文件数据文件FSO对象模型10.110.210.1数据文件1.文件的基本概念(1)字符字符(Character)是数据的最小单位。(2)域域(Field)是由几个字符组成的。(3)记录在数据库中处理数据是以记录(Record)为单位,记录是由一群相关的域组成。(4)文件由一些具有一个或一个以上的记录集合而成的数据单位称为文件(File)。10.1数据文件2.文件访问类型在VB中有三种文件访问的类型:顺序访问文件、随机访问文件和二进制访问文件。(1)顺序访问文件(2)随机访问文件(3)二进制访问文件VB提供的大部分语句和函数对于三种文件类型都适用。表10.1列出可用于三种文件访问类型的语句和函数。语句和函数顺序型随机型二进制型Close√√√Get√√Input()√√Input#√LineInput#√Open√√√Print#√Put√√Type...EndType√Write#√表10.1语句和函数10.1数据文件3.文件的存取步骤虽然使用三种文件访问的数据类型不相同,但它们存取步骤相似,主要的步骤如下:(1)使用Open语句打开文件,并为文件指定一个文件号。(2)从文件中读取部分或全部数据到内存变量。(3)对变量中的数据进行处理。(4)将处理后的数据保存回文件。(5)使用Close语句关闭文件。10.1.1顺序文件1.顺序文件的打开与关闭(1)打开文件在对文件进行操作之前,必须用Open语句打开或建立一个文件。语法:Open文件名[For模式][Access存取类型][锁定]As[#]文件号[Len=记录长度](2)关闭文件文件读写完后,应使用Close语句及时关闭。关闭某文件时,所有与该文件相关联的缓冲区空间都被释放,文件与其文件号之间的关联将终结。如果没有关闭文件,会导致部分和全部信息丢失。语法:Close[[[#]文件号][,[#]文件号]…]例如,打开和关闭两个文件:Dimi,FileNameFori=1To2FileName=Score&i'创建文件名OpenFileNameForOutputAs#i'打开文件NextiClose'关闭所有文件10.1.1顺序文件2.顺序文件写操作(1)Write#语句Write#语句用于将表达式写到顺序文件中。语法:Write#文件号,[表达式列表]例如,把“2003010101,李小明”包括所有标点符号写入到文件中:Write#1,2003010101,李小明(2)Print#语句Print#语句用于将一个或多个格式化数据写到顺序文件中。语法:Print#文件号,[表达式列表]例如,把字符串“2003010101李小明”写入文件号为1的文件中:Print#1,2003010101;李小明10.1.1顺序文件3.顺序文件的读操作(1)Input#语句Input#语句用于从已打开的顺序文件中读出数据并赋给变量。语法:Input#文件号,变量列表(2)LineInput#语句LineInput#语句用于从已打开的顺序文件中读出一行数据,并赋给字符变量或变体型变量。语法:LineInput#文件号,变量名(3)Input函数Input函数返回以Input或Binary方式打开的文件中的字符。语法:Input(字符个数,[#]文件号)与Input#语句不同,Input函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。10.1.1顺序文件4.常用函数和语句(1)FreeFile函数FreeFile函数返回下一个可供Open语句使用的文件号,提供一个尚未使用的文件号。使用FreeFile函数获取可用的文件号是编程的良好习惯。语法:FreeFile[(文件号范围)](2)Lof函数Lof函数返回Open语句打开的文件大小,以字节为单位。语法:LOF(文件号)(3)EOF函数EOF函数表明是否到达顺序文件的结尾。使用EOF是为了避免在文件结尾处读数据而产生错误,对于顺序文件EOF函数告诉用户是否到达文件的最后一个字符或数据项。语法:EOF(文件号)EOF函数当到达文件尾部时返回True,否则返回False。10.1.1顺序文件(4)Seek语句Seek语句用来在用Open语句打开的文件中,设置下一个读写操作的位置,将相应的文件指针移到指定的记录位置。语法:Seek[#]文件号,位置其中,位置是指下一个读写操作将要发生的位置,是介于1~2147483647之间的数字。可以是整型或长整型。【例10-1】在窗体中放置三个文件系统控件驱动器列表框、目录列表框和文件列表框,选择文本文件.txt,打开并将文件内容显示在文本框中。界面设计:在窗体上放置驱动器列表框Drive1、目录列表框Dir1和文件列表框File1,一个文本框Text1用来显示文件内容,一个标签Label1用来显示文件名。10.1.1顺序文件属性设置:文件列表框File1的Patten属性设置为“*.txt”;文本框Text1的MultiLine属性设置为True,ScrollBars属性设置为3-Both。运行界面如图10.1所示。程序代码如下。图10.1运行界面10.1.2随机文件1.定义记录类型随机文件是由多个字段的记录组成,采用用户定义类型的变量对应文件中的记录。在标准模块中使用“Type…EndType”语句定义一个类型,这个类型应和随机文件的记录类型一致。例如,要建立一个学生成绩的文件,则一个学生记录可以定义为名为Score的用户定义类型,有5个字段包括学号、姓名、语文、数学和英语,定义语句如下:PublicTypeScoreType学号AsString*10姓名AsString*16语文AsSingle数学AsSingle英语AsSingleEndType10.1.2随机文件2.打开和关闭文件用Open语句以随机访问的方式打开随机文件。语法:Open文件名[ForRandom]As[#]文件号[Len=记录长度]3.读写文件读文件使用Get语句,写文件使用Put语句。语法:Get[#]文件号,[记录号],变量名Put[#]文件号,[记录号],变量名10.1.2随机文件4.添加记录在随机文件中添加记录,是先找出文件的最后一个记录的记录号,然后将新的记录写在它的后面。添加记录的步骤:(1)用Lof函数获取文件的长度,用Len函数获取记录的长度;(2)最后一个记录的记录号=文件长度/记录长度;(3)使用Put#语句向最后一个记录的记录号后面添加新记录。10.1.2随机文件5.删除记录将随机文件中记录删除的最好方法是把文件中不需要删除的记录拷贝到一个临时新文件中,然后删除老文件。删除记录的步骤如下:(1)创建一个新文件。(2)把不删除的所有记录从原文件复制到新文件,而需删除的记录不复制。(3)关闭原文件并用Kill语句删除原文件。(4)使用Name语句把新文件重命名为原文件名。10.1.2随机文件【例10-2】打开文件在窗体中添加记录,输入记录内容。界面设计:在窗体中放置五个文本框数组Text1(0)~Text1(4),用来输入五个字段,三个按钮Command1~Command3用来“打开文件”、“添加记录”和“结束”,设置Command2的Enabled属性为False。运行界面如图10.2所示。图10.2运行界面10.1.2随机文件程序设计:本程序使用两个模块,一个标准模块Module1,一个窗体Form1模块。(1)Module1模块程序PublicTypeScoreType学号AsString*10姓名AsString*16语文AsSingle数学AsSingle英语AsSingleEndType(2)Form1模块程序10.1.3二进制文件使用Open语句打开文件,Close语句关闭文件。二进制访问中的Open语句没有指定记录长度,即使指定记录长度也被忽略。语法:Open文件名ForBinaryAs[#]文件号二进制存取方式与随机存取方式一样,使用Get#语句和Put#语句进行读写操作。二进制存取方式与随机存取方式的不同在于:二进制存取可以定位到文件的任一字节位置即定位到字符;二进制存取从文件中读出数据或向文件中写入数据的长度取决于Get#或Put#语句中变量的长度。语法:Get[#]文件号,[字节位置序号],变量名Put[#]文件号,[字节位置序号],变量名例如,从“考试成绩.txt”文件的指定位置40,写入一个字符串“2003010106”:DimDataAsSingleDimS1AsStringOpenc:\考试成绩ForBinaryAs#1S1=2003010106Put#1,40,S110.2FSO对象模型FSO对象模型包含在Scripting类型库(Scrrun.Dll)中,必须引用“MicrosoftScriptingRuntime”对象模块才能使用FSO对象模型。选择“工程”菜单“引用”菜单项,打开“引用”对话框,再选择“MicrosoftScriptingRuntime”复选框,如图10.3所示。图10.3引用Scripting类型库10.2.1访问FSO对象模型1.创建FSO对象创建一个FSO对象可以通过将一个变量声明为FileSystemObject对象类型或创建一个FileSystemObject对象来完成。(1)用声明变量的方法成绩一个FileSystemObject对象例如:DimFsoAsNewFileSystemObject(2)使用CreateObject方法来创建一个FileSystemObject对象。例如:DimFsoAsFileSystemObjectSetFso=CreateObject(“Scripting.FileSystemObject”)10.2.1访问FSO对象模型2.FSO对象的方法(1)GetDrive方法GetDrive方法返回一个与指定路径中的驱动器相对应的Drive对象。语法:FileSystemObject.GetDrive(驱动器)(2)GetFolder和GetFile方法GetFolder方法返回一个和指定路径中文件夹相对应的Folder对象,GetFile方法返回一个和指定路径中文件相对应的File对象,文件夹路径可以是绝对的或相对的路径。语法:FileSystemObject.GetFolder(文件夹路径)FileSystemObject.GetFile(文件路径)例如,访问“考试成绩.txt”文件:DimFsoAsNewFileSystemObjectDimF1AsFileSetF1=Fso.GetFile(c:\考试成绩.txt)10.2.2驱动器和文件夹操作1.驱动器操作驱动器(Drive)对象可以获得系统所用驱动器的信息,这些驱动器可以是物理的,也可以是位于网络上的,Drive对象的属性如表10.2所示。属性名功能描述TotalSize以字节表示的驱动器空间。AvailableSpace或FreeSpace以字节表示的驱动器可用空间。DriveLetter给驱动器指定的字母号。DriveType驱动器类型。SeriaNumber驱动器序号。FileSystem驱动器使用的文件类型。IsReady驱动器是否可用。ShareName和VolumeName共享名称和卷标名称。PathRootFolder驱动器的路径或根文件夹。表10.2Drive对象的属性表10.2.2驱动器和文件夹操作【例10-3】在窗体中使用FSO对象模型来显示各驱动器的信息。首先将引用FSO对象模型,选择“工程”菜单“引用”菜单项,打开“引用”对话框,再选择“MicrosoftScriptingRuntime”复选框。界面设计:在窗体界面中放置一个组合框Combo1用来显示驱动器,一个文本框Text1用来显示驱动器信息,Text1的MultiLine属性设置为True,ScrollBars属性设置为3-Both。运行界面如图10.4所示,显示“C:”驱动器的信息。图10.4运行界面