1 / 32

单元辅导(八)

单元辅导(八). 文件处理. [ 学习目标 ] 掌握:文件控件和文件操作。    理解:文件类型及结构。 [ 学习要点 ] 利用文件控件处理文件的方法、文件处理函数、文件系统对象( FileSystemObject )编程。 在计算机系统中,文件是指存放在外部存储介质上的数据和程序等。为了方便用户存取,在现代的计算机系统中,都包含有文件管理系统,用户可以对文件进行各种各样的处理和操作,如选择、打开和删除等。. 文件控件:

vartan
Download Presentation

单元辅导(八)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单元辅导(八) 文件处理

  2. [学习目标] 掌握:文件控件和文件操作。    理解:文件类型及结构。 • [学习要点] 利用文件控件处理文件的方法、文件处理函数、文件系统对象(FileSystemObject)编程。 在计算机系统中,文件是指存放在外部存储介质上的数据和程序等。为了方便用户存取,在现代的计算机系统中,都包含有文件管理系统,用户可以对文件进行各种各样的处理和操作,如选择、打开和删除等。

  3. 文件控件: 一、DriveListBox控件:在程序的运行过程中,为用户提供一个选择有效的磁盘驱动器的功能,该控件可以用来显示用户系统中所有有效磁盘驱动器的列表。Drive属性,可以在程序的运行阶段通过设置Drive属性的值来改变DriveListBox控件的缺省驱动器。 例: 1、添加控件如图;设置属性:ToolTipText:DriveListBox控件的应用 2、添加代码: Private Sub Form_Load() Drive1.Drive = "e:\" End Sub

  4. 3、运行程序: 演 示 实 验  二、DirListBox控件:在程序的运行过程中,显示分层的 目录列表。 重要属性 Path属性:用于返回或设置当前路径,属性的值是一个指示路径        的字符串。 例:1、添加DirListBox控件和DriveListBox控件 2、添加代码: Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Drive1.Enabled = True Dir1.Enabled = True Drive1.Drive = "e:\" End Sub

  5. 3、运行程序: 演 示 实 验 List属性:返回或设置控件的列表部分的工程。  语法:object.List(index)[=string]  说明:Object:对象表达式 Index:列表中具体某一工程的号码 String:字符串表达式 例:1、界面设计:放置一个DriveListBox控件和一个DirListBox控件。

  6. 2、添加代码: Private Sub Dir1_Change() MsgBox Dir1.List(-2) End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Drive1.Enabled = True Dir1.Enabled = True Drive1.Drive = "e:\" End Sub 3、运行程序: 演 示 实 验

  7. ListCount属性:返回控件的列表部分工程的个数,对DirListBox 控件而言,ListCount属性中存储着当前目录中子目录的个数。 例:1、添加代码:Private Sub Dir1_Change() MsgBox Dir1.ListCount End Sub 2、运行结果: 演 示实 验

  8. 三、FileListBox控件:在程序的运行过程中,根据Path属性三、FileListBox控件:在程序的运行过程中,根据Path属性 指定的目录,将文件定位并列举出来。 例:1、界面设计:设置属性:Patteren:*.txt;*.exe 2、添加代码: Private Sub Form_Load() File1.Path = "c:\windows\" End Sub Private Sub File1_Click() Text1.Text = "文件路径:" & File1.Path & "\" & File1.FileName End Sub

  9. 3、运行程序: 演 示实 验

  10. 例:1、添加控件,设置属性 • 利用文件控件来处理文件 • 第一个示例:综合利用DriveListBox控件、DirListBox控件和 FileListBox控件的协调工作来处理文件。 2、添加代码: Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub

  11. Private Sub File1_Click() MsgBox File1.Path & "\" & File1.FileName End Sub Private Sub Form_Load() Drive1.Enabled = True Dir1.Enabled = True File1.Enabled = True File1.Pattern = "*.exe" Drive1.Drive = "c:\" End Sub 3、运行程序: 演 示 实 验

  12. 第二个示例: 1、添加控件,设置属性 2、添加代码: Private Sub Command1_Click() End End Sub Private Sub Command2_Click() CommonDialog1.ShowOpen Image1.Picture = LoadPicture(CommonDialog1.FileName) End Sub Private Sub Command3_Click() Image1.Picture = LoadPicture("") End Sub Private Sub Form_Load() Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True End Sub

  13. 3、运行程序: 演 示 实 验 • 文件处理函数 Kill 语句:从磁盘中删除文件,它的语法结构如下:Kill pathname  其中参数pathname是用来指定一个文件名的字符串表达式, pathname要包含文件所在的目录或文件夹以及驱动器。Kill支持多 字符(*)和单字符(?)的统配来指定多重文件。FileCopy 语句:复制一个文件 ,它的语法结构如下FileCopy source,destination  在FileCopy语句的语法中包括两个参数,其中soure用来表示要 被复制的源文件名,而 destination 用来指定要复制的目的文件名在 Source 和 destination 参数中都要包含文件所在的目录或文件夹以及 驱动器。

  14. Shell 函数 :执行一个可执行文件,同时返回一个Variant(Double),如果 成功的话,代表这个程序的任务ID,若不成功,则会返回0. 它的语法结构如下:Shell(pathname[,windowstyle])参数说明:pathname为所要执行的应用程序的名称及其路径和必要 的参数;windowstyle表示在程序运行时窗口的样式。其中的参数 windowstyle的设置及其说明如表设置值说明: 0 窗口被隐藏,且焦点会移到隐藏式窗口; 1窗口具有焦点,且会还原到它原来的大小和位置;2窗口会以一个具有焦点的图标来显示;3窗口是一个具有焦点的最大化窗口;4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口 仍然保持活动; 6窗口会以一个图标来显示,而当前活动的窗口仍然保持活动。 RmDir 语句:删除一个存在的而且为空的目录或文件夹,它的语法 结构如下所示:Rmdir path  其中参数Path是一个字符串表达式,用来指定要删除的目录或文件 夹。如果在参数 Path 中没有指定驱动器 ,则 Rmdir 会在当前驱动器上 删除为空的目录或文件夹。

  15. Name语句:重新命名一个文件、目录或文件夹,它的语法结构如下: Name oldpathname As newpathname 其中包括以下两个部分:oldpathname为字符串表达式,由它来指定已存在的文件名和位置, 在其中包含目录或文件夹以及驱动器。newpathname也是字符串表达,它指定新的文件名和位置,同样要 包含目录或文件夹以及驱动器。 • 文件系统 在计算机中,文件随着分类方法的不同名也各不一致。 按照文件的存取方式及其组成结构可以分为两种类型: 顺序文件、随机文件;按照文件的数据编码方式来分可以分为 ASCII码文件和二进制文件; 按照文件的特征属性来分可以分为 系统文件、隐藏文件、只读文件、普通文件和存档文件;按照文件的数据性质来分可以分为 程序文件和数据文件。

  16. 文件的访问语句和函数: 一、顺序文件顺序的访问是为普通的文本文件的使用而设计的。文件中每一个 字符都被假设为代表一个文本字符或者文本格式序列。数据被存储为 ASCII字符。而为随机型访问打开的文件则认为是由相同长度的记录 集合组成。可用记录类型来创建由各种各样的字段组成的记录,每个 字段可以有不同的数据类型。数据作为二进制信息存储。二进制访问 允许使用文件来存储所希望的数据。除了没有数据类型或者记录长度 的含义外,它与随机访问很相似。

  17. 所谓的顺序文件,通常指的是普通的文本文件,文件中的字符所谓的顺序文件,通常指的是普通的文本文件,文件中的字符 包括文本字符及控制字符,如“,”,“chr(14)”,“cr,lf” ,“chr(10)等。  由于这类型文件的信息是按照顺序从头到尾按顺序排列,而且 只提供第一条记录的存储位置,所以对其中的数据信息进行处理是 相当困难的。 【顺序文件的打开】打开顺序文件的语法结构如下:Open pathname For mode [Access access] [lock] as [#] filenumber [Len=reclength] Open语句的语法参数及其说明: Pathname:指定文件路径和文件名 Mode:指定文件方式,有Append,Binary,Input,Output或 Random方式 Access:说明打开的文件 可以进行的操作,有Read,Write或 ReadWrite操作 Lock:说明其它进程能够打开的文件进行的操作Shared,Lock, Read,LockWrite和LockReadWrite操作 Filenumber:一个有效的文件号,范围在1到511之间 Reclength:小于或等于32767(字节)的一个数,对于用随机访问 方式打开的文件,该值就是记录长度,对于顺序文件, 该值就是缓冲字符数 。

  18. 【顺序文件的读操作】  从顺序文件中的读取数据的语法结构:Input # filenumber,varlist Input # 语句的语法参数及说明如下:filenumber:有效的文件号varlist:用逗号分界的变量列表,将文件中读出的值分配给这些变量。【利用Write#语句执行写操作】  向顺序文件中写入数据的语法结构:Write # filenumber,[outputlist] Write # 语句的语法具有以下几个部分,它的参数及说明如下:filenumber: 一个有效的文件号outputlist: 要写入文件的表达式,用逗号将这些表达式分界 【利用Print#语句执行写操作】Print#语句的功能是把格式化显示的数据写入顺序文件中,它的 语法结构:Print #filenumber,[output]

  19. 其中参数包括以下两个部分:Filenumber:一个有效的文件号 Outputlist:要写入文件的表达式,用逗号将这些表达式分界 其中参数outputlist的设置如下:[{|Spc(n)|tab[(n)]}][expression][charpos] Spc(n):输出数据中插入空白字符,数字n表示要插入的空白字符个数 tab(n):用来将插入点定位在某一绝对列号上,n是列号 expression:要打印的数值表达式或字符串表达式 charpos: 指定一个字符的插入点 二、随机文件随机文件由记录组成,能够随机存取其机同长度的数据记录, 每一数据记录内可以设计各种栏位以容纳不同的数据。此种文件数 据是以二进制的位的形式保存存在磁盘上。【变量声明 】  在应用程序打开随机文件以前,应用声明所有用来处理该文件 数据所需的变量,包括用户定交类型的变量,它对应着该文件中的 记录和标准类型的其它变量,这些变量保存随机文件相关的数据。 在打开一个文件进行随机访问之前,应定交一个类型,该类型对应 于该文件包含或将包含的记录。

  20.   因为随机文件中的所有记录都必须有相同的长度,所以可在类型  因为随机文件中的所有记录都必须有相同的长度,所以可在类型 定义中声明字段变量。固定的长度对用户定交类型中的各字符串元素 通常很有用。【打开随机文件】要打开随机文件,使用以下语法的Open语句Open pathname [For Random] As filenumber Len=reclength  因为Random是缺省的访问类型,所以For Random 关键字是可选 项。表达式Len=reclength指定了每个记录的字符数。如果reclength比 实际长度短,则会产生一个错误。如果reclength比实际长度和,则可 写入,但是会浪费磁盘空间。 【编辑随机文件】  如要编辑随机文件,先把记录从文件读到程序变量,然后改变 各变量的值,最后,把变量写回该文件。使用 Get 语句把记录复制 到变量。使用 Put语句把记录添加或者替换到随机文件。使用Put语 句,指定要替换的记录位置。  要向随机文件的尾端添加新记录,可使用Put语句。把 Position 变量的值设置为文件中的记录数增1。 例:要在一个包含五个记录的文件中的添加一个记录,把 Position 设置为6.下述语句把一个记录添加到文件的末尾;lastRecord=LastRecord+Put #Filenum,LastRecord,Employee通过清除其字段可删除一个记录,但是该记录仍在文件中存在。 最好把余下的记录拷贝到一个新文件,然后删除旧文件。

  21. 要清除随机文件中删除的记录,按照以下步骤执行:S1:创建一个新文件。S2:把所有有用的记录从原文件复制到新文件S3:关闭原文件并用Kill语句删除它。S4:使用Name语句把新文件以原文件的名字重新命名三、二进制文件  二进制文件与随机文件类似,惟一不同是:不必限制于固定长度,要清除随机文件中删除的记录,按照以下步骤执行:S1:创建一个新文件。S2:把所有有用的记录从原文件复制到新文件S3:关闭原文件并用Kill语句删除它。S4:使用Name语句把新文件以原文件的名字重新命名三、二进制文件  二进制文件与随机文件类似,惟一不同是:不必限制于固定长度, 可以用喜欢的方式来存取文件。    二进制访问能提供对文件的完全控制,因为文件中的字节可以 代表任何东西。例如,通过创建长度可变的记录可保存磁盘空间。 当要保存文件的尺寸尽量小时,应使用二进制型访问。  要打开二进制的文件,应使用以下open语句的语法:open pathname for binary as filenumber  通过使用二进制型访问可使磁盘空间的使用降到最小。因为二 进制文件不需要固定长度的字段,类型声明语句可以省略字符串长度 参数。例如可以为children类型添加一个字段description来记录幼儿的 一些其他信息: type children name as string *8 age as integer code as string *6 description as string end type

  22.   因为description字段中内容的长度是不固定的,而且往往相差很多,  因为description字段中内容的长度是不固定的,而且往往相差很多, 有的可能没有,而有的可能会很长,如果使用固定长度的string类型势 必会造成设置字符串长度的矛盾--太长会浪费磁盘空间,而太短又无法 容纳某些长长的文字。而在二进制文件中每个记录只占用所需字节, 所以不必为字段指定长度。当记录中的字段需要包含大段文字时, 使用二进制文件可以节省大量的磁盘空间。  二进制文件的读写使用与读写随机文件相同的语句:{get|put} [#]filenumber,position,varname  其中varname参数可以是任何类型的变量,包括可变长度的字符 串以及用户自定义的类型。而position参数则指明get 或put语句要处 理的位置。  二进制存取方式由于可以使用长度可变字段,所以不能随机地 访问记录--必须顺序地访问记录以了解每个记录的长度,这是进行 二进制输入/输出的主要缺点。但是在这种文件模式下,可以直接查 看文件中指定的字节,所以二进制模式也是唯一支持用户到文件的 任何位置读写任意长度数据的方法。   为了可以同时使用随机文件和二进制文件的优点,可以使用这样 的组合--当字段的长度固定或者长度变化不大时,可以将这些字段存 储在随机文件中,而对于长度变化很大的字段,可以保存在二进制文 件中,而在随机文件的记录中设置一个字段指定它在二进制文件中的位 置即可。这样,既可以利用随机文件的方便快捷,又可以大大节省许多 磁盘空间。

  23. FSO对象模型编程包括三项主要任务:1、使用CreateObject方法,或将一个变量声明为FileSystemObjectFSO对象模型编程包括三项主要任务:1、使用CreateObject方法,或将一个变量声明为FileSystemObject 对象类型来创建一个FileSystemObject对象。2、对新创建的对象使用适当的方法。3、访问该对象的属性。 FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于 Scrrun.DII文件中。如果还没有引用此文件,从[属性]菜单的[引用]对 话框选择“Microsoft Scripting Runtime ”项。然后就可以使用“对象浏 览器“来查看其对象、集合、属性、方法、事件以及它的常数。 【创建FileSystemObject对象】1、创建 一个FileSystemObject对象:可以通过如下两种方法完成 (1)将一个变量声明FileSystemObject对象类型 Dim fso as new FileSystemObject(2)使用CreatObject方法来创建一个FileSystemObject对象对象类型 Set ofs =creatobject(Scripting FileSystemObject) Scripting 是类型库的名称,而FileSystemObject则是要创建一个实例的 对象的名字。第一种方法中在VB中有效,而第二种方法在VB或VBscrip 中都可行的。 • 文件系统对象编程

  24. 2、使用该FileSystemObject对象的适当方法 如果要创建一个新对象,既可以使用CreatFolder方法也可以使用 CreateTextFile方法(FSO对象模型不支持创建或删除驱动器)。如果 要删除对象,可以使用FileSystemObject对象的DeleteFile和DeleteFolder 方法,或者File和Folder对象的Delete方法。使用适当的方法,还可 以复制、移动文件和文件夹。FileSystemObject对象模型中有一些功 能是冗余的。例如,要复制一个文件,既可以使用FileSystemObject 对象的CopyFile方法。 【访问已有的驱动器、文件和文件夹】  要访问一个已有的驱动器、文件或文件夹,可以使用FileSystem_ Object对象中相应的get方法:GetDrive,GetFolder,GetFile.例如:Dim fso As New FileSystemObject,fil as file set fil=fso.getfile("c:\test.txt") 并不需要对新创建的对象使用get方法,因为cteate函数已经返回 了一个句柄到新创建的对象。例如,如果使用CreateFolder 方法创建 了一个新的文件夹,就没有必要使用getfolder方法来访问该对象的名 称、路径、大小等属性。只要给createfolder函数设置一个变量来获取 新建文件夹的句柄,然后就可以访问其属性、方法和事件:

  25. Private Sub Create_Folder()Dim fso as new filesystemobject,fldr as folder Set fldr =fso.createfolder(“c:\mytest”) Msgbox“created folder:” & fldr.Name End Sub  访问对象的属性一旦有了对象的句柄,就能够访问其属性。 例如,假定要获得一个特定文件 夹的名称。首先要创建该对象的一个 实例,然后通过适当的方法得到其句柄:set fldr =fso.getfolder(“c:\”)现 在有了一个folder对象的句柄,可以查看其name属性:Debug.Print“Folder name is :”fldr.name如果要找出一个文件 的最新修改时间,可以使用如下的语法:Dim fso as new filesystemobject,fil as file Set fil=fso.getfile(“C:\detlog.txt”) ‘获得要查询的file 对象。Debug.Print“File last modified:”;fil.DateLastModified ’打印信息 【使用驱动器】  如同在windows资源管理器中能进行的交互方式一样,可以在 程序中使用FSO对象模型来处理驱动器和文件夹,可以复制和移动 文件夹,获得驱动器和文件夹的信息,等等。

  26. Drive对象允许获得系统的各个驱动器的信息,这些驱动器可以是Drive对象允许获得系统的各个驱动器的信息,这些驱动器可以是 物理的,也可以是位于网络上的,通过该对象的属性可以获得下列信 息: 以字节表示的驱动器总间和以字节表示的驱动器可用空间 (AvailableSpacea或FreeSpace属性)为驱动器指定的字母号和驱动器类型,诸如可移动的、固定的、 网络。CD_ROM、或者RAM盘(DriveType属性)驱动器序列号(SerialNumber属性)驱动器使用的文件系统类型,诸如FAT,FAT32,NTFS等等(File_ System属性) 驱动器是否可用(IsReady属性)共享和或卷标的名称(ShareaName和VolumeName属性) 驱动器的路径或根文件 夹(Path和RootFolder属性) 【使用文件夹】任务方法: 创建一个文件夹 FileSystemObject.CreateFolder 删除一个文件夹 Folder.Delete或FileSystemObject.DeleteFolder

  27. 移动一个文件夹 Folder.move或FileSystemObject.MoveFolder 复制一个文件夹 Folder.Copy或FileSystemObject.CopyFolder 检索文件夹的名称 Folder.Name 查找一个文件夹是否在驱动器上 FileSystemObject.FolderExists 获得已有Folder对象的一个实例 FileSystemObject.GetFolder 找出一个文件夹的父文件夹的名称 FileSystemObject.GetParentFolderName 找出系统文件夹的路径 FileSystemObject.GetSpacialFolder 【使用文件】  通过使用新的面向对象的FSO对象,如Copy,Delete,Move以及 OpenAsTextStream,或者使用传统的函数,如Open,Close,FileCopy, GetAttr等等,可以使用VB中的文件。注意,不用考虑其文件类型就 可以移动、复制或删除文件。文件操作主要有两类:创建、添加或移动数据,以及阅读文件 移动、复制和删除文件

  28. 用FileSystemObject创建文件并添加数据  有二种不同方法来创建一个顺序文本文件 一种方法就是使用CreateTextFile方法。 要创建一个空文本文件: • Dim fso As New FileSystemObject,fil As File • Set fil=fso.CreateTextFile(“c:\testfile.txt”,True)另一种方法是使用FileSystemObject对象的OpenTextFile方法, • 该对象的ForWriting标志设置为:Dim fso As New FileSystemObject,ts As New TextStream Set ts=fso.OpenTextFile(“c:\test.txt”,ForWriting) 或者使用带ForWriting标志设置的OpenAsTextStream Dim fso As New FileSystemObject,ts As New TextStream Set fso=CreamObject(“Scipting.FileSystemObject”) fso.CreateTextFile(“test1.txt”) Set fil=fso.GetFile(“test1.txt”) Set ts=fil.OpenAsTextStream(ForWriting)添加数据到文件文本  文件一经创建,就可以分三步向其中加入数据:(1)打开 • 文本文件以备写入数据。(2)写入数据。(3)关闭文件。

  29.   要打开文件,可以使用下面两种方法中的任一种:File对象的  要打开文件,可以使用下面两种方法中的任一种:File对象的 OpenAsTextStream方法,或FileSystemObject对象的OpenTextFile方法。 要向打开的文本文件中写入数据,可以使用TextStream对象的Write或 WriteLine方法。它们之间的惟一差别是WriteLine在指定的字符串末 尾添加换行符。如果在向文本文件中加一个空行,使用WriteBland_ Lines方法。要关闭一个已打开的文件,使用TextStream对象的Close 方法。 2.使用FileSystemObject 读取文件  要从一个文本文件中读取数据,可使用TextStream对象的Read, ReadLine或ReadAll 方法:从一个文件中读取文件中读取指定数量 的字符用Read,读取一整行用ReadLine,读取一个文本文件的所有内 容用ReadAll。如果使用Read或ReadLine方法并且要跳过数据的某些 部分,可以使用Skip或SkipLine方法。这些读取方法产生的文本被存 储在一个字符串中,而这个字符串可以在一个控件中显示,也可以被 字符串操作符分解、合并等等。 3.移动、复制和删除文件  对文件的移动、复制和删除,FSO对象模型都 提供了两种方法,

  30. 如表所示 例题:【工程】---【引用】----Micsoft Scripting Runtime module1: Option Explicit Sub manip_files() Dim fso As New filesystemobject, txtfile, fil1, fil2 Set txtfile = fso.CreateTextFile("e:\testfile.txt", True) MsgBox "写入文件" txtfile.write ("这是一个测试例子") txtfile.Close MsgBox "移动文件到e:\tmp" Set fil1 = fso.getfile("e:\testfile.txt") fil1.Move ("e:\tmp\testfile.txt") fil1.Copy ("e:\temp\testfile.txt") MsgBox "删除文件"

  31. Set fil1 = fso.getfile("e:\tmp\testfile.txt") Set fil2 = fso.getfile("e:\temp\testfile.txt") fil1.Delete fil2.Delete MsgBox "全部完成!" End Sub Form1: Option Explicit Private Sub Command1_Click() Call manip_files End Sub

  32. 小  结   本单元介绍了Windows操作系统中文件及管理的基本概念,并且 能够通过基本的文件处理函数来对文件进行一简单的处理。   在VB6.0中为了方便用户对方开发,提供了几种文件控件,如 DriveListBox控件、DirListBox控件、FileListBox控件和CommDialog 控件,它们可以实现相应不同的功能,只要协调好这几个控件的关 系,就可以实现初步的文件处理。

More Related