1 / 77

Visual Basic 程序设计

Visual Basic 程序设计. 第 5 章 文件处理应用程序设计方法. 5.1 文件管理器程序任务 5.1.1 任务描述 在文件是指存储在外部存储介质上的数据的集合,是一种可以永久性存储数据的形式。操作系统以文件为单位管理数据,文件名是文件存在的标识符。把数据写入文件或从文件中读取数据,计算机都是先根据文件名找到指定的文件,然后在执行读写操作。

kory
Download Presentation

Visual Basic 程序设计

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. Visual Basic程序设计 第 5 章 文件处理应用程序设计方法

  2. 5.1 文件管理器程序任务 5.1.1 任务描述 在文件是指存储在外部存储介质上的数据的集合,是一种可以永久性存储数据的形式。操作系统以文件为单位管理数据,文件名是文件存在的标识符。把数据写入文件或从文件中读取数据,计算机都是先根据文件名找到指定的文件,然后在执行读写操作。 利用Windows操作系统的资源管理器和“我的电脑”等程序,可以对磁盘文件进行列标、查看、删除、移动等操作,人们一般将这类程序称为文件管理器。VB提供了驱动器列表框、目录列表框和文件列表框三个控件来实现上述功能。 示例:用VB建立一个简单的文件管理器应用程序,通过该程序能够浏览磁盘目录和文件,并显示它们的属性。

  3. 目录列表框 文件列表框 驱动器列表框 5.1.2 界面设计 1.创建工程 新建一个“标准EXE”工程,工程名为“文件管理”。其中将用到的主要控件如图所示。

  4. 2. 创建窗体

  5. 5.1.3 代码设计 1. 编写ClearAttr过程 因为选择一个新的文件时,需要将原来的文本属性复选框清空,这个功能在其它多个子程序中均要用到,所以在代码窗的“通用”部分创建以下子程序: Private Sub ClearAttr() Dim I As Integer For I = 0 To 5 '将Check1(0)~Check1(5)复选框清空 Check1(I).Value = 0 Next I End Sub

  6. 2. 编写ShowAttr过程 获取文件属性编写了一个通用子程序ShowAttr,该子程序有一个输入参数sPath,它是一个字符串型参数,采用值传递,表示输入的文件名。整个程序通过“与”操作比较文件属性字,判断文件属性。 Private Sub ShowAttr(ByVal sPath As String) Dim iAttr As Integer '存储文件的属性值 Call ClearAttr '调用复选框清空子程序 iAttr = GetAttr(sPath) '获取文件的属性 If iAttr And vbNormal Then '判断是否为普通文件 Check1(0).Value = Checked '是则普通复选框选中 End If If iAttr And vbReadOnly Then '判断是否为只读文件 Check1(1).Value = Checked '是则只读复选框选中 End If

  7. 2. 编写ShowAttr过程 If iAttr And vbHidden Then '判断是否为隐藏文件 Check1(2).Value = Checked '是则隐藏复选框选中 End If If iAttr And vbSystem Then '判断是否为系统文件 Check1(3).Value = Checked '是则系统复选框选中 End If If iAttr And vbArchive Then '判断是否为存档文件 Check1(4).Value = Checked '是则存档复选框选中 End If If iAttr And vbDirectory Then '判断是否为目录 Check1(5).Value = Checked '是则文件夹复选框选中 End If End Sub

  8. 3. 驱动器列表框控件的Change事件 当选择驱动器列表框,改变当去驱动器时会触发该控件的Change事件。因为当前驱动器改变,所以目录列列表框 、文件列表框的路径也因此相应改变。 Private Sub Drive1_Change() ChDrive Drive1.Drive '改变当前驱动器 Dir1.Path = Drive1.Drive '改变文件列表框的路径 Call ClearAttr '设置属性复选框组 End Sub

  9. 4. 目录列表框控件的Change事件 Private Sub Dir1_Change() ChDir Dir1.Path '改变当前目录 File1.Path = Dir1.Path '改变目录列表框的路径 ShowAttr Dir1.Path '设置属性复选框组 End Sub 5. 文件列表框控件的Click事件 Private Sub File1_Click() ShowAttr File1.FileName '设置属性复选框组 End Sub (演示)

  10. 5.2 文件系统控件及相关语句 5.2.1 改变当前驱动器 语法:ChDrive <驱动器名> 说明:驱动器是一个双引号的字符串表达式,它指定一个存在的驱动器。如果使用零长度的字符串( " "),则当前的驱动器不会改变。例如: ChDrive "D" '将当前驱动器改变为D

  11. 5.2 文件系统控件及相关语句 5.2.2 改变当前目录 语法:ChDir <路径名> 路径名是一个字符串表达式,它指定它指明哪个目录或文件夹成为新的缺省目录或文件夹路径名包含驱动器。如果没有指定驱动器,则ChDir在当前驱动器上改变缺省目录或文件夹 说明:ChDir语句改变缺省目录位置,但不会改变缺省驱动器位置。 例:将当前目录改变为D:\TMP ChDir “D:\TMP”

  12. 5.2 文件系统控件及相关语句 5.2.3 删除文件 语法:Kill <文件名> 文件名是字符串表达式,文件名可以带目录或文件夹,以及驱动器的路径。 说明:在Windows 中,Kill支持多字符(*)和单字符(?)的统配符来指定多重文件。比如: 1. 删除在D盘Data目录下的Test.txt文件 Kill “D:\Data\Test.txt” 2. 删除在C盘TEMP目录下所有以tmp为后缀的文件 Kill “C:\TEMP\*.tmp

  13. 5.2 文件系统控件及相关语句 5.2.4 拷贝文件 语法:FileCopy <源文件>,<目标文件> 源文件名是字符串表达式,用来表示要被复制的文件名。源文件可以包括目录和文件夹,以及驱动器。 目标文件名是字符串表达式,用来表示要复制的文件名。目标文件可以包括目录和文件夹,以及驱动器。 如果想要对一个已经打开的文件使用FileCopy语句,则会产生错误。

  14. 5.2 文件系统控件及相关语句 5.2.5 对文件重命名 语法:Name <旧文件名> As <新文件名> 旧文件名为必要参数,是字符串表达式,指定已存在的文件名和位置,可以包含目录或文件夹以及驱动器。 新文件名为必要参数,是字符串表达式,指定新的文件名和位置,可以包含目录和文件夹以及驱动器。而由新文件名所指定的文件名不能存在,

  15. 说明:Name语句重新命名文件并将其移动到一个不同的目录或文件夹中。对一个已经打开的文件使用Name将会产生错误。Name参数不能包含多字符(*)和单字符(?)统配符。说明:Name语句重新命名文件并将其移动到一个不同的目录或文件夹中。对一个已经打开的文件使用Name将会产生错误。Name参数不能包含多字符(*)和单字符(?)统配符。 例如: Dim OldName,NewName As String OldName=“OLDFILE”:NewName=“NEWFILE” Name OldName As NewName OldName=“C:\MYDIR\OLDFILE:”:NewName=“C:\YUORDIR\NEWFILE” Name OldName As NewName

  16. 5.2.6 创建新的目录(或文件夹) 语法: MkDir <目录名>或<文件夹名> 要创建的目录名或文件夹名是字符串表达式。目录名或文件夹名可以包含驱动器。如果没有指定驱动器,则在当前驱动器上创建新的目录或文件夹。比如: Mkdir “成绩单”

  17. 5.2.7 创建新的目录(或文件夹) 语法: RmDir <目录名>或<文件夹名> 要删除的目录名或文件夹名是字符串表达式。目录名或文件夹名可以包含驱动器。如果没有指定驱动器,则删除当前驱动器上的目录或文件夹。比如: 说明:如果用RmDir删除含有文件的目录或文件夹,则会产生错误。 RmdirN “成绩单\临时文件夹”

  18. 5.2.8 得到当前的路径 语法: CurDir [驱动器名] 说明:驱动器名是一个字符串表达式,是可选参数.它指定一个存在的驱动器.如果没有指定驱动器,或驱动器名是一个零长度的字符串(“”),则CurDir会返回当前驱动器的路径.该函数返回值为Variant(String)。比如: 设C驱动器的当前路径为: “C:\Program Files” 设D驱动器的当前路径为: “D:\VisualBasic 程序设计” 设C为当前驱动器。 Dim MyPath As String MyPath=CurDir ’返回“C:\ Program Files” MyPath=CurDir(“C”) ’返回“C:\ Program Files” MyPath=CurDir(“D”) ’返回“D:\VisualBasic 程序设计”

  19. 5 2.9 设置文件属性 语法:SetAttr<文件名>,<文件属性值> 文件名为必要参数,是字符串表达式,文件名可包含目录或文件夹,以及驱动器。 文件属性值是常数或数值表达式,其总和用来表示文件的属性。恩机属性的取值如下表所示:

  20. 例:将当前目录下的文件Text.txt设置为存档和只读文件:例:将当前目录下的文件Text.txt设置为存档和只读文件: SetAttr “Test.txt”,vbArchive+vbReadOnly SetAttr “Test.txt”,33 注意:如果想要给一个已打开的文件设置属性,则辉产生运行时错误。

  21. 5.2.10 得到文件属性 语法:GetAttr <文件名> 文件名用来指定一个文件名的字符串表达式,它可以包括目录或文件夹,以及驱动器。该函数返回一个Integer类型数据,此数值为文件、目录或文件夹的属性,属性值的取值同上表。 假设在当前目录下,有一个文件Test.txt,可通过下列方法得到其属性: Dim iAttr as Integer iAttr=GetAttr(“test.txt”) If iAttr And vbNormal Then Debug.Print “普通文件” End If

  22. If iAttr And vbReadONly Then Debug.Print “只读文件” End If If iAttr And vbHidden Then Debug.Print “隐藏文件” End If If iAttr And vbSystem Then Debug.Print “系统文件” End If If iAttr And vbDirectory Then Debug.Print “目录或文件夹” End If If iAttr And vbArchive Then Debug.Print “目录或文件夹” End If

  23. 5.2.1 常用文件系统控制 1. 驱动器列表框 驱动器列表框是一个下拉式列表框,用于设置显示当前磁盘驱动器的名称。运行时单击控件右侧的下三角按钮,可以显示该计算机内全部有效的驱动器。驱动器列表默认的驱动器名称为Drive1,Drive2,…。 驱动器列表框最常用的属性是Drive属性,该属性可以在程序运行时设置或返回选定的驱动器,只在运行阶段有效。例如: Drive1.Drive=“C:” ’指定C盘为当前驱动器 说明:Drive属性只指定了当前的驱动器,而要想使指定的驱动器真正成为当前驱动器,还必须使用ChDrive语句。例如 ChDrive Drive1.Drive ’指定C盘设置为当前驱动器 驱动器列表框中最重要的事件是Change事件。当驱动器列表框指定的当前驱动器发生改变时,触发该事件。

  24. 5.2.1 常用文件系统控制 2. 目录列表框 目录列表框(DirListBox)以列表方式显示当前驱动器上的所有目录,即分层的目录结构,不包括文件名在内。运行时双击目录名,就可以打开它的下级子目录。目录列表框的默认名称为Dir1,Dir2,…。 目录列表框最常用的属性是Path属性。该属性用于设置或返回当前目录的完整路径,包括驱动器名和上级目录名。Path属性只在运行阶段有效。例如: Dir1.Path=“C:\Visual Basic\Stu 注意Path属性只指定了当前目录,要想使指定的目录真正成为当前目录,还必须使用ChDir语句。例如: ChDir Dir1.Path 目录列表框中最重要的事件是Change事件。当目录列表框指定的当前目录发生改变时,触发该事件。

  25. 5.2.1 常用文件系统控制 3. 文件列表框 文件列表框(FileListBox)以列表方式显示当前目录下的所有文件。目录列表框的默认名称为File1,File2,…。其常用属性有三种: (1)Path属性。该属性用于设置所示的完整路径名称。例如: File1.Path=“C:\Visual Basic\Stu (2)Pattem属性:设置文件列表框中可以显示的文件类型。默认值为*.*,表示显示所有文件。例如: File1.Pattem=“*.txt” (3)FileName属性:设置或返回选定的文件名称,只在运行阶段可用。

  26. 程序文件 根据文件的内容 数据文件 文本文件 根据文件的编码 二进制文件 5.3 标准文件输入/输出 要读取文件并显示文件的内容,必须使用VB提供的标准文件输入/输出语句。 在计算机中,为了迅速有效地存取数据,文件必须以某种特定方式组织其中的数据,这种方式称为文件结构。文件的分类方法: 顺序文件 根据文件的存取方式 随机文件 二进制文件

  27. 5.3.1 顺序文件 1.顺序文件的打开和关闭 顺序文件是最简单的文件结构,它按次序一个接一个地排列记录,并且只提供第一个记录的位置。当需要读取某一个记录时,就必须按顺序从第一记录开始依次读出数据,直到找到所需记录为止。 (1)打开顺序文件 格式:Open <文件名> For <模式> As [#] <文件号>

  28. 说明: 1)文件名是所要打开的文件的名称,其中包括完整的路径名称。 2)模式指定文件的打开方式。可以是以下三种之一: Input:以只读方式打开文件。 Output:以写方式打开文件。该方式创建一个新的顺序文件,等待输出数据,如果存在同名文件,则覆盖原有文件内容。 Append:以追加方式打开文件。打开一个已经存在的文件,等待输出数据追加到原文件内容之后。如果不存在该文件,则创建一个新文件。

  29. 3)文件号是一个1~511之间的整数,可以同时被打开的每个文件的文件号不能相同。文件被打开后,此文件号就代表该文件,通过它读写文件,直至文件被关闭。例如:3)文件号是一个1~511之间的整数,可以同时被打开的每个文件的文件号不能相同。文件被打开后,此文件号就代表该文件,通过它读写文件,直至文件被关闭。例如: 以只读方式打开A盘中的D1.Dat文件: Open “A:\D1.Dat” For Input As #1 以写方式打开当前盘当前文件夹中的D2.xtt文件: Open “A:\D2.txt” For Output As #2

  30. (2)关闭顺序文件 格式:Close [[[#] <文件名>],[[#] <文件号>]…] 说明: 1)文件号是Open语句打开文件时指定的文件号。 2)Close语句可以同时关闭多个已经打开的文件。 例如: 关闭文件号为1的文件: Close #1 关闭文件号为1 和2的两个文件: Cloise #1,#2 关闭所有已打开的文件: Close

  31. 2. 顺序文件的写操作 以Output方式或Append方式打开顺序文件后,可以使用Print # 语句或write # 语句向文件中写(输出)数据。 (1)Print # 语句 格式: Print # <文件号>,[输出项列表] 功能:将各输出项的值写入到指定的文件中。 说明: (1)输出项可以是常量、变量或表达式,输出项多于一个时,各输出项之间可以用逗号或分号分隔。

  32. 2)输出项之间使用分号分隔时,按紧凑格式输出到文件。如果输出形是字符串,则输出项之间不留空格;如果输出项是数值型数据,则在整数前面留一个空格,在负数前面留一个负号。2)输出项之间使用分号分隔时,按紧凑格式输出到文件。如果输出形是字符串,则输出项之间不留空格;如果输出项是数值型数据,则在整数前面留一个空格,在负数前面留一个负号。 3)输出项之间使用逗号分隔时,按分区格式输出到文件,10列为一个分区。 4)在输出项之间可以使用Spc(n)函数输出n个空格,使用Tab(n)函数指定其后面的输出项从n列开始输出。 5)Print # 语句的末尾可以加分号、逗号或不加任何符号。加分号时,表示下一个Print # 语句的输出项不换行,直接按紧凑格式输出;加逗号时,表示下一个Print # 语句的输出项不换行,按分区格式输出;不使用任何符号时,下一个Print # 语句的输出项换行输出。

  33. 例:使用Print语句将数据写入到文件中 Private Sub Form_Load() Open "D:\D1.txt" For Output As #1 '打开输出文件 Print #1, “Print # 语句测试” '向文件中输出一行数据 Print #1, '向文件中输出一个空行 Print #1, “第一分区”, “第二分区” '分区格式输出数据 Print #1, “你好!”; 2 * 3, 2 + 3 '紧凑、分区两种格式输出数据 Print #1, Spc(2); “输出2个空格” 'Spc函数向文件中写入两个空格 Print #1, Tab(5); "从第5列开始输出" 'Tab函数指定从第5列开始输出 Print #1, “行1” '换行测试 Print #1, "行2" Close #1 End Sub [演示]

  34. 程序运行结果: Print # 语句测试 第一分区 第二分区 你好! 6 5 输出2个空格 从第5列开始输出 行1 行2

  35. (2)write # 语句 格式:Write # <文件号>,[输出项列表] 功能:将各输出项的值写入到指定的文件中。 说明: Write # 语句的功能与Print # 语句基本相同,主要区别是: 1)Write # 语句在各输出项之间自动插入逗号。 2)Write # 语句为字符串加双引号。 3) Write # 语句在将最后一个字符谢入文件后会插入回车换行符,即Chr(13)+Chr(10).

  36. 例:使用Write语句将数据写入到文件中 Private Sub Form_Click() Open "D:\D1.txt" For Output As #1 '打开输出文件 Write #1, “Print # 语句测试” '向文件中输出一行数据 Write #1, '向文件中输出一个空行 Write #1, “第一分区”, “第二分区” '不分区格式输出数据 Write #1, “你好!”; 2 * 3, 2 + 3 ‘不分区两种格式输出数据 Write #1, Spc(2); "输出2个空格" 'Spc函数向文件中写入两个空格 Write #1, Tab(5); "从第5列开始输出" 'Tab函数指定从第5列开始输出 Write #1, "行1" '换行测试 Write #1, "行2" Close #1 End Sub

  37. 程序运行结果: "Print # 语句测试" "第一分区","第二分区" "你好!",6,5 "输出2个空格" "从第5列开始输出" "行1" "行2"

  38. 对比Print # 语句和Write # 语句的结果: (1)Print # 语句在输出项中,用逗号分隔输出项,则可以按分区格式输出;而用Write # 语句中虽然也用逗号分隔输出项,但是并不按分区格式输出,而是在输出项之间用逗号分隔,所以对于Write # 语句,用逗号或用分号分隔输出项是没有差别的。 (2)Print # 语句生成的数据文件,数据项之间没有引号;而用Write #语句生成的数据文件,,数据项自动加上了以号。

  39. 3. 顺序文件的读写 以Open…For Input As 方式打开顺序文件后,可以使用 Input # 语句、Line Input # 语句或Input函数从文件中读(输入)数据。 (1)Input # 语句 格式: Input # <文件号>,<变量列表> 功能:从指定文件中读取数据并将其赋值给对应的变量。 说明: 1)变量列表中的变量可以是基本类型的变量和数组元素,但不能是数组或对象变量。 2)变量个数多于一个时,中间用逗号分隔。 3)Input # 语句一般与Write #语句配合使用,也就是说,如果数据文件是用Write #写入生成的,则应该用Input # 读取该数据文件。

  40. 例:使用Input # 语句读取D2.txt文件 Private Sub Command1_click() Dim A Open "D:\D2.txt" For Input As #1 '打开输入文件 Do While Not EOF(1) '判断文件是否结束 Input #1, A Print A '在窗体上形式变量A的值 Loop End Sub

  41. 程序运行结果:

  42. (2)Line Input # 语句 格式:Line Input # <文件号>,<变量> 功能:从指定的文件中读出一行数据并将其赋值给字符串变量。 说明: 1) Line Input # 依次从文件中读取一行数据,直到遇到回车符Char(13)或回车换行符Char(13)+Char(10)为止。 2) Line Input # 语句一般与Print # 配合使用。

  43. 例如:使用Line Input # 语句读取D1.txt文件的程序代码: Private Sub Command1_Click() Dim A Open "d:\d1.txt" For Input As #1 Do While Not EOF(1) Line Input #1, A Print A Loop Close #1 End Sub

  44. 程序秩序结果:

  45. (3)Input 函数 格式:Input <字符个数>,[#]<文件号> 功能:从指定的文件中读取指定个数的字符。 说明:函数Input返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。

  46. 5.3.2 随机文件 随机文件是可以按照任意顺序读写的文件,它的每条记录都有一个记录号,并且所有记录的长度是相等的。读取数据时,只要指定记录号,就可以直接读取记录。随机文件一旦打开,就可以同时进行读写操作。 随机文件的记录是由若干不同数据类型和长度的字段组成的,各字段的长度之和就是记录的长度。在VB中通常可以利用自定义数据类型来定义记录结构,但必须将字符串定义为定长字符串类型,以保证所有的记录长度相同。

  47. 例如:定义学生信息记录结构 Private Type Student Name As String * 20 ’姓名,字符串型数据,长度为20个字符 Age As Integer ’年龄,整型数据 End Sub 此后就可以利用该用户自定义类型Student来声明变量,以存取随机文件的记录内容。例如:Dim s As Student

  48. 1.随机文件的打开和关闭 (1)打开随机文件 格式:Open <文件名> For Ramdom As [#] <文件> [Len=记录长度] 说明: 1)文件名是所要打开的文件名称,包括完整的路径名称。 2)记录长度用来指定随机文件每条记录的长度,默认为128字节,取值范围为0~32K字节,也可以在程序中用Len函数获得记录长度。 3)随机文件打开后,既可以从文件中读取数据,也可以向文件中写入数据。 例如:打开A盘的随机文件D3.txt Open “A:\d3.txt” For Random As #1 Len=Len(Student)

  49. 2.随机文件的写操作 格式:Put [#] <文件号>,[记录号],<变量名> 功能:把变量中的数据写入指定文件中记录号指定的记录位置。 说明: (1)记录号是大于1的整数 (2)省略记录号时,新记录插入到当前的记录之后。

  50. 随机文件写入演示

More Related