第12章 文 件

64
LOGO 第 12 第 第第第第 : • 第第第第第第第 • 第第第第 • 第第第第 • 第第第 第第 • 第第第 第第第第

Upload: odette-hardy

Post on 30-Dec-2015

51 views

Category:

Documents


3 download

DESCRIPTION

本章要点: • 文件的基本概念 • 顺序文件 • 随机文件 • 文件系统控件 • 文件系统对象模型. 第12章 文 件. 12.1 文件的基本概念. 文件: 是指存储在外部介质上的数据的集合。 分类: 从文件内容分 — 程序文件、数据文件 按存取方式分 — 顺序文件、随机文件、二进制文件 顺序文件: 普通的纯文本文件。 查找数据必须按记录顺序进行。 不能同时进行读写操作。 随机文件: 以固定长度的记录为单位进行存储。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第12章   文    件

LOGO

第 12 章 文 件本章要点 :

• 文件的基本概念

• 顺序文件

• 随机文件

• 文件系统控件

• 文件系统对象模型

Page 2: 第12章   文    件

www.themegallery.com2

12.1 文件的基本概念 文件 : 是指存储在外部介质上的数据的集合。 分类 : 从文件内容分—程序文件、数据文件 按存取方式分—顺序文件、随机文件、二进制文件顺序文件 : 普通的纯文本文件。 查找数据必须按记录顺序进行。 不能同时进行读写操作。随机文件 : 以固定长度的记录为单位进行存储。 可以按任意顺序访问其中的数据。 可以同时进行读写操作。 不能用字处理软件查看。二进制文件 : 以字节为单位进行访问。 不能用字处理软件查看。

Page 3: 第12章   文    件

www.themegallery.com3

12.1 顺序文件

顺序文件 : ASCII 文件 由任何字处理软件建立、在 VB 中建立 只能按顺序存取记录 例 : 文件 AA.DAT 内容如下 : "zhang san","85","90" "li si","70","66" "wang wu","90","89" 记录 : 行 域 : 字段,数据项 顺序文件操作 : 打开文件、读或写文件、关闭文件

Page 4: 第12章   文    件

www.themegallery.com4

12.2.1 顺序文件的打开和关闭1. 顺序文件的打开 使用之前必须先打开 格式 :Open < 文件名 > FOR < 方式 > AS [#]< 文件号 > 功能 : 按指定的方式打开文件,并指定一文件号。 < 方式 >: Input— 以只读方式打开。当文件不存在时出错。 Output — 以写方式打开。 如果文件不存在,则创建一个新文件。 如果文件已经存在,则删除原数据。 Append— 以添加方式打开文件。 如果文件不存在,就创建一个新的文件。 如果文件已经存在,写数据时从文件尾开始进行添加。 < 文件号 > : 1到 511 之间的整数。

12.1 顺序文件

Page 5: 第12章   文    件

www.themegallery.com5

例 : (1) 在 C 盘 Data 文件夹下建立一个名为 stud.dat 的文件 Open "c:\Data\stud.dat" For Output As #1(2) 打开当前盘当前文件夹下的 salary.dat 文件,以便从

中读取数据 Open "salary.dat" For Input As #8(3) 打开 C 盘 Data 文件夹下名为 stud.dat 的文件,以

便在文件末尾添加数据 Open "c:\Data\stud.dat" For Append As 2

12.1 顺序文件

Page 6: 第12章   文    件

www.themegallery.com6

2. 顺序文件的关闭 完成文件操作后,要关闭打开的文件。 格式 : Close [< 文件号列表 >] 其中 : < 文件号列表 > 缺省时关闭所有打开的文件。例 : (1) 关闭文件号为 1 的文件 Close #1 (2) 关闭文件号为 1 、 2 、 8 的文件 Close #1, 2, #8 ' 文件号前的“ #” 号可以省

略 (3) 关闭所有打开的文件 Close

12.1 顺序文件

Page 7: 第12章   文    件

www.themegallery.com7

12.2.2 顺序文件的读写 1. 顺序文件的写操作 (1) Write # 语句 格式 : Write #< 文件号 >,[< 输出列表 >] 功能 : 将 < 输出列表 > 的内容写入指定的文件中。 说明 : • < 输出列表 > 中各项之间要用逗号分开 • < 输出列表 > 每一项可以是常量、变量或表达式。 • 写到文件中的各数据间自动插入逗号,字符串自动加

上双引号 • 所有数据写完后,在最后加入一个回车换行符。 • 不含 < 输出列表 > 的 Write # 语句,将在文件中写

入一空行

12.1 顺序文件

Page 8: 第12章   文    件

www.themegallery.com8

【例 12-1 】建立一个新的学生成绩文件,将输入的学生成绩添加到文件中。界面如下图。

CommonDialog1

Text1

Text2

Text3

Text4

Command1 Command2

12.1 顺序文件

Page 9: 第12章   文    件

www.themegallery.com9

Private Sub Form_Load() CommonDialog1.ShowSave Open CommonDialog1.FileName For Output As #2End SubPrivate Sub Command1_Click() ' 添加 no = Text1.Text : na = Text2.Text g1 = Val(Text3.Text) : g2 = Val(Text4.Text) Write #2, no, na, g1, g2 Text1.Text = "" : Text2.Text = "" Text3.Text = "" : Text4.Text = ""End SubPrivate Sub Command2_Click() ' 退出 Close #2 EndEnd Sub

与 Append 的区别?12.1 顺序文件

Page 10: 第12章   文    件

www.themegallery.com10

(2) Print # 语句 格式 : Print #< 文件号 >,< 输出列表 > 功能 : 将 < 输出列表 > 的内容写入指定的文件中。 说明 : • 当 < 输出列表 > 用逗号分隔时,采用分区格式输出; • 当 < 输出列表 > 用分号分隔时,采用紧凑格式输出。 • 所有项将在一行内输出,输出后将自动换行。 • 可以使用 Spc() 函数和 Tab() 函数。

将例 12-1 中的 Write # 语句改用 Print # 语句 : Print #2, no, na, g1, g2

12.1 顺序文件

Page 11: 第12章   文    件

www.themegallery.com11

用 Print # 语句 ( 使用分号分隔符 ) 产生的数据 :

001 张三 87 92

002 李四 76 89

003 王五 93 86

用 Write # 语句生成的数据 :

"001"," 张三 ",87,92

"002"," 李四 ",76,89

"003"," 王五 ",93,86

用 Print # 语句 ( 使用逗号分隔符 ) 产生的数据 : 001 张三 87 92002 李四 76 89003 王五 93 86

12.1 顺序文件

Page 12: 第12章   文    件

www.themegallery.com12

2. 顺序文件的读操作(1) Input # 语句格式 : Input #< 文件号 >,< 变量列表 >功能 : 从文件中读取数据,并按顺序给变量列表中的变量赋

值。说明 : 常用于读取用 Write 语句生成的文件数据。 按顺序读,每读完一条记录,记录指针向后移动一条

记录。

12.1 顺序文件

Page 13: 第12章   文    件

www.themegallery.com13

【例 12-2 】读入上例生成的文件,并计算每个学生的平均成绩,界面如下,其中,通用对话框控件用于打开一个“打开文件”对话框,在对话框中所选择的文件将作为要显示的文件。

CommonDialog1

Command1

Text1

12.1 顺序文件

Page 14: 第12章   文    件

www.themegallery.com14

Private Sub Command1_Click() CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #3 Text1.Text = "" Do While Not EOF(3) ' 装入用 Write # 语句生成的文件 Input #3, num, nam, s1, s2 ave = (s1 + s2) / 2 Text1.Text = Text1.Text & num & " " & nam _ & " " & Str(s1) & " " & Str(s2) & _ " " & Str(ave) & Chr(13) & Chr(10) Loop Close #3End Sub

12.1 顺序文件

Page 15: 第12章   文    件

www.themegallery.com15

(2) Line Input # 语句格式 : Line Input #< 文件号 >,< 变量名 >功能 : 从文件中读取一行数据,作为字符串存放在 < 变量

名 > 中。(3) Input 函数格式 : < 变量名 >=Input( 整数 ,[#]< 文件号 >)功能 : 从指定文件的当前位置一次读取指定个数的字符,并

赋值给变量。(4) InputB 函数格式 : < 变量名 >=InputB( 字节数 ,[#]< 文件号 >)功能 : 从指定文件的当前位置一次读取指定字节数的数据,

并赋值给变量。

12.1 顺序文件

Page 16: 第12章   文    件

www.themegallery.com16

EOF 函数 : 在读顺序文件时,常用 EOF 函数判断是否已读到了文件尾。格式为 : EOF(< 文件号 >) 。 当到达文件的结尾时, EOF 函数返回 True 。否则返回 False 。【例 12-3 】读取例 12-1 生成的学生成绩文件,计算每个学生的平均成绩,计算每门课的平均成绩,将结果显示于文本框中,同时将计算结果与原数据保存于另外一个指定的文件中,设计界面如下图所示。

CommonDialog1

Text1

Text2

12.1 顺序文件

Page 17: 第12章   文    件

www.themegallery.com17

分析 : 设立三个数组 : 学号、姓名、成绩

G(N,2)

……

G(3,2)

G(2,2)

G(1,2)

英语 G(N,2)数学 G(N,1)

G(N,1)NAM(N)NUM(N)

………………

G(3,1)NAM(3)NUM(2)

G(2,1)NAM(2)NUM(2)

G(1,1)NAM(1)NUM(1)

成绩 G姓名 NAM学号 NUM

12.1 顺序文件

Page 18: 第12章   文    件

www.themegallery.com18

Dim Num(100) As String, Nam(100) As String

Dim G(100, 2) As Integer, N As Integer

Private Sub Command1_Click() ' 装入数据 CommonDialog1.ShowOpen

Open CommonDialog1.FileName For Input As #3

N = 0

Do While Not EOF(3)

N = N + 1

Input #3, Num(N), Nam(N), G(N, 1), G(N, 2)

Text1.Text = Text1.Text & " " & Num(N) & _

" " & Nam(N) & " " & Str(G(N, 1)) & _

" " & Str(G(N, 2)) & " " & Chr(13) & Chr(10)

Loop

End Sub

12.1 顺序文件

Page 19: 第12章   文    件

www.themegallery.com19

Private Sub Command2_Click() ' 计算平均 CommonDialog1.ShowSave

Open CommonDialog1.FileName For Output As #4

SUM1 = 0

SUM2 = 0

Text2.Text = ""

For i = 1 To N

Ave = (G(i, 1) + G(i, 2)) / 2

Write #4, Num(i), Nam(i), G(i, 1), G(i, 2), Ave

Text2.Text = Text2.Text & " " & Num(i) & _

" " & Nam(i) & " " & Str(G(i, 1)) & " " & _

Str(G(i, 2)) & " " & Str(Ave) & Chr(13)

SUM1 = SUM1 + G(i, 1): SUM2 = SUM2 + G(i, 2)

Next i

12.1 顺序文件

Page 20: 第12章   文    件

www.themegallery.com20

Text2.Text = Text2.Text & " 总平均 " & " " & _ Str(SUM1 / N) & " " & Str(SUM2 / N) Write #4, "总平均 ", SUM1 / N, SUM2 / NEnd SubPrivate Sub Command3_Click() ' 退出 Close #3, #4 EndEnd Sub

12.1 顺序文件

Page 21: 第12章   文    件

www.themegallery.com21

12.3 随机文件

随机文件特点 : 读写次序任意、记录长度相等 随机文件中的记录常定义为用户自定义类型。 1. 用户自定义类型 [Private|Public] Type < 自定义类型名 > <元素名 >[( 下标 )] As < 类型 > [<元素名 >[( 下标 )] As < 类型 >] … End Type

说明 : (1) < 自定义类型名 > 、 <元素名 >遵循变量的命名规则。(2) < 类型 > 可以是 VB 系统提供的基本数据类型或已声明

的自定义类型。

Page 22: 第12章   文    件

www.themegallery.com22

(3) 缺省 [Private|Public] 选项时,默认为 Public 。 必须在窗体模块或标准模块的“通用”位置的声明段进行声明。

在窗体模块中定义时必须使用 Private 关键字。(4) 如果自定义类型的一个元素为数组,则其下标的下界不

受 Option Base 语句的限制。(5) 在使用自定义类型前,必须先声明自定义类型的变量。(6) 引用自定义类型元素,使用如下格式 : < 自定义类型变量名 >.<元素名 >

12.1 顺序文件

Page 23: 第12章   文    件

www.themegallery.com23

例 : 在窗体的声明段中定义如下的 Students 类型用来存放学生的信息,并声明一个 Students 类型的变量。在窗体的 Load事件过程中,实现对变量的每个元素赋值。单击窗体输出自定义类型变量各元素的值。代码如下 :

Private Type Students Dept As String * 20 ' 系 ClassNo As String * 10 ' 班级 Name As String ' 姓名 Age As Integer ' 年龄 End Type Dim Stud As Students ' 声明一个自定义类型变

12.1 顺序文件

Page 24: 第12章   文    件

www.themegallery.com24

Private Sub Form_Load() ' 给变量的每个元素赋值 Stud.Dept = " 计算机系 " Stud.ClassNo = " 软件 2001-1" Stud.Name = " 张三 " Stud.Age = 18End SubPrivate Sub Form_Click() Print Stud.Dept ' 输出每个元素的值 Print Stud.ClassNo, Stud.Name, Stud.AgeEnd Sub

12.1 顺序文件

Page 25: 第12章   文    件

www.themegallery.com25

12.3.1 随机文件的打开和关闭 1. 随机文件的打开 使用之前必须先打开文件 格式 : Open < 文件名 > [For Random] As < 文件号

> Len = < 记录长度 > 说明 : (1) For Random 表示打开随机文件,可以省略。 (2) < 记录长度 >: 通常就是自定义类型的大小,可用

Len 函数获得。 (3) 若文件不存在,则建立一个新的文件。 2. 随机文件的关闭 Close 语句

12.1 顺序文件

Page 26: 第12章   文    件

www.themegallery.com26

12.3.2 随机文件的读写 1. 写文件 格式 : Put [#]< 文件号 >,[< 记录号 >],< 变量名 > 功能 : 将一个变量的数据写入随机文件中。 说明 : (1) < 记录号 >: 若文件中已有此记录,则该记录将被新数

据覆盖;若文件中无此记录,则在文件中添加一条新记录。

如果省略 < 记录号 > ,则写入数据的记录号为上次读或写的记录的记录号加 1 。

(2) < 变量名 >: 通常是一个自定义类型的变量,也可以是其他类型的变量。

12.1 顺序文件

Page 27: 第12章   文    件

www.themegallery.com27

2. 读文件格式 : Get [#]< 文件号 >,[< 记录号 >],< 变量名 >功能 : 将一个已打开的随机文件读入一个变量之中。【例 12-4 】建立学生成绩随机文件。界面如下图。

12.1 顺序文件

Page 28: 第12章   文    件

www.themegallery.com28

Private Type StudRec No As String * 6 Name As String * 8 Math As Integer English As IntegerEnd TypeDim StudTab As StudRecPrivate Sub Form_Load() CommonDialog1.ShowSave Open CommonDialog1.FileName For Random

As #1 Len = Len(StudTab)End Sub

12.1 顺序文件

Page 29: 第12章   文    件

www.themegallery.com29

Private Sub Command1_Click()

StudTab.No = Text1.Text

StudTab.Name = Text2.Text

StudTab.Math = Val(Text3.Text)

StudTab.English = Val(Text4.Text)

Put #1, , StudTab

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text4.Text = ""

End Sub

Private Sub Command2_Click()

Close #1

End

End Sub

12.1 顺序文件

Page 30: 第12章   文    件

www.themegallery.com30

12.4 文件系统控件

驱动器列表框 (DriveListBox) 目录列表框 (DirListBox) 文件列表框 (FileListBox) 作用 : 获取有关驱动器、目录和文件的当前状态

Page 31: 第12章   文    件

www.themegallery.com31

12.4.1 驱动器列表框 (DriveListBox) 显示系统中所有有效磁盘驱动器1. 属性 : Drive— 返回或设置驱动器名称 只能在运行时设置,值— A: C: D: E: 等 例 : Drive1.Drive="c:" 注意 : 改变 Drive属性并不能自动变更当前驱动器, 要改变当前驱动器需使用 ChDrive 语句。 例 : ChDrive "D:" 例 : ChDrive Drive1.Drive

2. 事件 : Change— 当选择一个新驱动器或通过代码 改变 Drive 属性时发生。

例 : 将选择的驱动器设置为当前驱动器 : Private Sub Drive1_Change() ChDrive Drive1.Drive End Sub

12.4 文件系统控件

Page 32: 第12章   文    件

www.themegallery.com32

12.4.2 目录列表框 (DirListBox) 显示一个树型的目录结构 1. 属性 : Path—设置或返回当前工作目录的完整路径 (包括驱动器盘符 )

例 : Dir1.Path = "c:\winnt"

注意 : 在目录列表框中选择目录不能改变当前目录 , 要真正改变当前目录需使用 ChDir 语句。 例 : ChDir "c:\system" 例 : ChDir Dir1.Path 2. 事件 Change— 当双击一个目录项或通过代码改变 Path 属性时发生。

例 : 将选择的路径设置为当前路径 Private Sub Dir1_Change() ChDir Dir1.Path End Sub

12.4 文件系统控件

Page 33: 第12章   文    件

www.themegallery.com33

12.4.3 文件列表框 (FileListBox)

显示特定目录下的文件。 1. 属性(1) Path

设置或返回当前工作目录的完整路径。 (2) FileName 设置或返回所选文件的路径和文件名。 设置时 : 文件名可以带路径 返回时 : 文件名不含路径名(3) Pattern:设置对显示文件的过滤。 例 : Filelistbox1.Pattern= "*.EXE ; *.COM "

只显示以 .EXE 和 .COM 为后缀的文件 2. 事件 Click 和 DblClick事件

12.4 文件系统控件

Page 34: 第12章   文    件

www.themegallery.com34

【例 12-5 】使用以下界面进行文件的复制和删除。

Drive1

Dir1

File1

Drive2

Dir2

File2

12.4 文件系统控件

Page 35: 第12章   文    件

www.themegallery.com35

Private Sub Drive1_Change() ChDrive Drive1.Drive Dir1.Path = Drive1.DriveEnd SubPrivate Sub Dir1_Change() ChDir Dir1.Path File1.FileName = Dir1.PathEnd SubPrivate Sub Drive2_Change() ChDrive Drive2.Drive Dir2.Path = Drive2.DriveEnd SubPrivate Sub Dir2_Change() ChDir Dir2.Path File2.FileName = Dir2.PathEnd Sub

12.4 文件系统控件

Page 36: 第12章   文    件

www.themegallery.com36

Private Sub Command1_Click() ' 复制 If File1.FileName = "" Then MsgBox "请选择文件 " Exit Sub End If srcfile = Dir1.Path & "\" & File1.FileName If File2.FileName = "" Then desfile = Dir2.Path & "\" & File1.FileName Else desfile = Dir2.Path & "\" & File2.FileName End If FileCopy srcfile, desfile File1.Refresh File2.RefreshEnd Sub

12.4 文件系统控件

Page 37: 第12章   文    件

www.themegallery.com37

Private Sub Command2_Click() ' 移动 If File1.FileName = "" Then MsgBox "请选择文件 " Exit Sub End If srcfile = Dir1.Path & "\" & File1.FileName If File2.FileName = "" Then desfile = Dir2.Path & "\" & File1.FileName Else desfile = Dir2.Path & "\" & File2.FileName End If FileCopy srcfile, desfile Kill srcfile File1.Refresh File2.RefreshEnd Sub

12.4 文件系统控件

Page 38: 第12章   文    件

www.themegallery.com38

Private Sub Command3_Click() ' 删除 If File1.FileName = "" Then MsgBox "请选择源文件 " Exit Sub End If srcfile = Dir1.Path & "\" & File1.FileName Kill srcfile File1.Refresh File2.RefreshEnd Sub

12.4 文件系统控件

Page 39: 第12章   文    件

www.themegallery.com39

12.5 文件系统对象模型 (FSO)

通过对象提供的属性和方法来操纵和管理文件系统。 12.5.1 文件系统对象模型概述 1. FSO 对象模型的主要对象 (1) FileSystemObject—核心对象。提供了一整套用于创

建、删除、收集相关信息,以及通常的操作驱动器、文件夹和文件的方法。

(2) Drive— 用来收集系统所用的驱动器的信息。(3) Folder—提供对一个文件夹所有属性的访问 ( 查询文件

夹的名称、路径等 ) 。也允许使用适当的方法创建、删除或移动文件夹。

(4) File—提供对文件所有属性的访问 ( 查询文件的名称、路径等 ) ,也可以使用适当的方法创建、删除或移动文件。

(5) TextStream—允许用户读和写文本文件。

Page 40: 第12章   文    件

www.themegallery.com40

2. 使用 FSO 对象模型编程的主要步骤(1) 创建 FileSystemObject 对象。(2) 根据编程需要,有两种选择 : • 对 FileSystemObject 对象使用适当的方法生成用于管理驱动器、文件夹和文件的对象 ( 如 Drive 对象、 Folder 对象、 File 对象 ) ;用新创建的对象进行文件和文件夹的复制、移动、删除。

• 使用 FileSystemObject 对象的方法,进行文件或文件夹的创建、复制、移动、删除。再生成用于管理驱动器、文件夹和文件的对象 ( 如 Drive 对象、 Folder 对象、 File 对象 )来实现其他功能。

(3) 访问步骤 2 生成的新对象的属性,来获取文件系统的信息 ( 如文件名称、大小等 ) 。

12.5 文件系统对象模型 (FSO)

Page 41: 第12章   文    件

www.themegallery.com41

3. FileSystemObject 对象的创建 创建 FileSystemObject 对象主要有二种方法 : (1) 使用 New 关键字,将一个变量声明为 FileSystemObject 对象类型。 例 : Dim fso As New FileSystemObject (2) 使用 CreateObject 函数创建一个

FileSystemObject 对象。 例 : Set fso =

CreateObject("Scripting.FileSystemObject")

12.5 文件系统对象模型 (FSO)

Page 42: 第12章   文    件

www.themegallery.com42

3. 说明

(1) FSO 对象目前不支持对二进制文件和随机文件的访问,只能通过 TextStream 对象读写纯文本文件。

(2) FileSystemObject 对象提供了许多与其他对象相同的功能,如 FileSystemObject 对象的 CopyFile 方法与 File 对象的 Copy 方法功能一样。编程时可以任选一种方法使用。

12.5 文件系统对象模型 (FSO)

Page 43: 第12章   文    件

www.themegallery.com43

12.5.2 管理驱动器 功能 : 读取系统本地驱动器的信息,获得网络驱动器的信

息等。 使用 Drive 对象管理驱动器。 Drive 对象的属性见书上 P227 表 12-2 。【例 12-6】调用 Drive 对象的属性获得驱动器的信息 Private Sub Command1_Click()

' 创建一个 FileSystemObject 对象 fso

Dim fso As New FileSystemObject

' 将变量 drv声明为 Drive 对象类型 Dim drv As Drive, s_string As String

' 返回一个 Drive 对象 Set drv = fso.GetDrive("C:")

12.5 文件系统对象模型 (FSO)

Page 44: 第12章   文    件

www.themegallery.com44

' 调用 Drive 对象的属性获得驱动器信息 s_string = "驱动器 " & ("C:") & vbCrLf s_string = s_string & "磁盘总容量 :" & _ FormatNumber(drv.TotalSize / 1024, 0) s_string = s_string & " Kb" & vbCrLf s_string = s_string & "剩余空间 :" & _ FormatNumber(drv.FreeSpace / 1024, 0) s_string = s_string & " Kb" & vbCrLf MsgBox s_stringEnd Sub

12.5 文件系统对象模型 (FSO)

Page 45: 第12章   文    件

www.themegallery.com45

12.5.3 管理文件夹 功能 : 文件夹的创建、复制、移动、删除及获取与文件夹有关的信息 使用 FileSystemObject 对象和 Folder 对象都可以完成对文件夹

的管理。 管理文件夹的部分属性和方法见书 P228 表 12-3 、 4 1. 文件夹的创建 例 : 使用 FileSystemObject 对象的 CreateFolder 方法在 C 盘

上创建两个文件夹 “ apple” 和“ orange” 。 Dim fso

Set fso = _

CreateObject("Scripting.FileSystemObject")

Fso.CreateFolder("c:\apple")

Fso.CreateFolder("c:\orange")

12.5 文件系统对象模型 (FSO)

Page 46: 第12章   文    件

www.themegallery.com46

2. 文件夹的复制、移动、删除例 : 将上例创建的文件夹 orange复制到 apple 文件夹中 方法一 : 使用 FileSystemObject 对象的方法Dim fsoSet fso =

CreateObject("Scripting.FileSystemObject")fso.CopyFolder "c:\orange", "c:\apple\"

方法二 : 使用 Folder 对象的方法Dim fso, o_folderSet fso =

CreateObject("Scripting.FileSystemObject")Set o_folder = fso.GetFolder("c:\orange")o_folder.Copy "c:\apple\"

12.5 文件系统对象模型 (FSO)

Page 47: 第12章   文    件

www.themegallery.com47

3. 获取与文件夹有关的信息 FileSystemObject 对象和 Forlder 对象配合使用【例 12-7】查看文件夹 apple 的部分属性。Private Sub Form_Click() Dim fso, o_folder, s_Str Set fso=CreateObject("Scripting.FileSystemObject") Set o_folder = fso.GetFolder("c:\apple") ' 获得文件夹所在的驱动器 s_Str = " 文件夹 " & o_folder.Name & " 在 " s_Str=s_Str & UCase(o_folder.Drive) & "驱动器上 " s_Str = s_Str & vbCrLf & vbCrLf ' 获得文件夹名及创建时间 s_Str = s_Str & " 创建时间是 :"& _ o_folder.DateCreated MsgBox s_StrEnd Sub

12.5 文件系统对象模型 (FSO)

Page 48: 第12章   文    件

www.themegallery.com48

12.5.4 管理文件功能 : 包括文件的创建 ( 打开 ) 、复制、移动、删除及获取与文件 有关的信息。可以使用 FileSystemObject 对象和 File 对象完成文件管理工 作。管理文件的部分属性和方法 :P229-230 表 12-5;表 12-6 1. 文件的创建与打开 FSO 对象模型提供了三种创建和打开文件的方法 : (1) 使用 FileSystemObject 对象的 CreateTextFile 方法 格式 : < 对象名 >.CreateTextFile(< 文件名 >[,<覆盖否

>[,Unicode]])

功能 : 创建一个指定文件名的文件,并且返回一个用于对该文件进行读写的 TextStream 对象。

12.5 文件系统对象模型 (FSO)

Page 49: 第12章   文    件

www.themegallery.com49

说明 : ①< 对象名 >: 一个 FileSystemObject 的名字。②< 文件名 >: 字符串表达式,表示新创建的文件名。③<覆盖否 >: 当设置为 False 时,表示如果文件已存在,

新创建的文件不覆盖原文件,否则覆盖原文件。缺省值为False 。

使用前应用 FileExists 方法判断文件是否存在,以免发生错误。

④Unicode: 当设置为 False 时,表示创建 ASCII 文件,否则创建 Unicode 文件。缺省值为 False 。

12.5 文件系统对象模型 (FSO)

Page 50: 第12章   文    件

www.themegallery.com50

【例 12-8 】创建一个名为“ testfile.txt” 的文件,并在文件中写入“创建文件方法一 : 使用 CreateTextFile 方法”。

Private Sub Command1_Click() Dim fso, tso Set fso = CreateObject("Scripting.FileSystemObject") ' 判断文件是否存在 If fso.FileExists(“c:\testfile.txt”) Then MsgBox " 文件已存在! " Unload Me Else Set tso = fso.CreateTextFile("c:\testfile.txt", True) tso.WriteLine (" 创建文件方法一 : 使用 CreateTextFile 方法 ") ' 向文件中写 tso.Close End IfEnd Sub

12.5 文件系统对象模型 (FSO)

Page 51: 第12章   文    件

www.themegallery.com51

(2) 使用 FileSystemObject 对象的 OpenTextFile 方法

格式 :< 对象名 >.OpenTextFile (< 文件名 >[,< 方式 >[,< 创建否 >[,< 文件格式

>]]]) 功能 : 打开指定的文件 ; 返回一个 TextStream 对象 说明 : ①< 对象名 >: 一个 FileSystemObject 的名字。 ②< 文件名 >: 字符串表达式,表示新创建或打开的文件名。 ③< 方式 >: 可选项。表示输入 /输出方式,可为常量

ForReading 或 ForAppending 。 ④< 创建否 >: False— 如果文件不存在将不创建文件, True

— 时创建一个新文件。 缺省值为 False 。 ⑤< 文件格式 >: 打开文件的格式。 如果省略,则文件以 ASCII 格式打开。

12.5 文件系统对象模型 (FSO)

Page 52: 第12章   文    件

www.themegallery.com52

【例 12-9】创建一个名为 TestFile.txt 的新文件,并写入“打开或创建文件方法二 : 使用 OpenTextFile 方法”。 Private Sub Command1_Click()

Dim fso, fTextStream Set fso = _ CreateObject("Scripting.FileSystemObject") ' 创建 TextStream 对象 Set fTextStream=fso.OpenTextFile("c:\testfile.txt", _ 2, True) fTextStream.Write _ "打开或创建文件方法二,使用 OpenTextFile 方法 " fTextStream.Close ' 关闭文件End Sub

12.5 文件系统对象模型 (FSO)

Page 53: 第12章   文    件

www.themegallery.com53

(3) 使用 File 对象的 OpenAsTextStream 方法 格式 : < 对象名 >.OpenAsTextStream([< 方式 >,[< 文件格式>]]) 功能 : 打开指定的文件 ; 返回一个 TextStream 对象, 该对象可用来对文件进行读、写、追加操作。 说明 : ①< 对象名 >: 一个 File 对象的名字。 ②< 方式 >: 表示输入 /输出方式。可为常量 : ForReading 、 ForWriting 或ForAppending ③< 文件格式 >: 指示打开文件的格式。 如果省略,则文件以 ASCII 格式打开。

12.5 文件系统对象模型 (FSO)

Page 54: 第12章   文    件

www.themegallery.com54

【例 12-10】用写方式创建文件“ testfile.txt” ,并写入“创建文件方法三 : OpenAsTextStream 方法”。

Private Sub Command1_Click() Dim fso, fo, tso Set fso =

CreateObject("Scripting.FileSystemObject") fso.CreateTextFile "c:\testfile.txt" ' 创建一个文件 ' 获得一个 File 对象的文件句柄 Set fo = fso.GetFile("c:\testfile.txt") ' 创建 TextStream 对象用于写 Set tso = fo.OpenAsTextStream(2) tso.Write " 创建文件方法三 (OpenAsTextStream 方法 )" tso.CloseEnd Sub

12.5 文件系统对象模型 (FSO)

Page 55: 第12章   文    件

www.themegallery.com55

2. 文件的复制、移动、删除(1) 使用 FileSystemObject 对象的 CopyFile 、 MoveFile 、 DeleteFile 方法。例 : Dim fso, foSet fso =

CreateObject("Scripting.FileSystemObject")' 复制文件“ c:\testfile.txt” 到 "c:\destination\

textfile.txt"fso.CopyFile "c:\testfile.txt", "c:\destination\ "

12.5 文件系统对象模型 (FSO)

Page 56: 第12章   文    件

www.themegallery.com56

(2) 使用 File 对象的 Copy 、 Move 、 Delete 方法。例 : Dim fso, foSet fso = CreateObject("Scripting.FileSystemObject")'复制文件 "c:\testfile.txt" 到 "c:\destination\textfile.txt"Set fo= fso.GetFile("c:\testfile.txt") ' 获得 File 对象句柄fo.Copy "c:\destination\"

12.5 文件系统对象模型 (FSO)

Page 57: 第12章   文    件

www.themegallery.com57

3.获取与文件有关的信息 FileSystemObject 对象和 File 对象必须配合使用才能获取文件的有关信息。【例 12-11 】执行下列程序可以查询文件 : c:\windows\notepad.exe

建立的时间和文件大小等文件信息。 Private Sub Command1_Click()

Dim fso, fo, stemp

Set fso =_

CreateObject("Scripting.FileSystemObject")

' 获得一个 File 对象 Set fo = fso.GetFile("c:\windows\notepad.exe")

sString = “ 文件 ” & _ UCase(fo.Name) & vbCrLf & vbCrLf ' 获得文件名

12.5 文件系统对象模型 (FSO)

Page 58: 第12章   文    件

www.themegallery.com58

' 获得文件创建时间 sString = sString & " 建立的时间是 : " & _ fo.DateCreated & vbCrLf & vbCrLf ' 获得文件的大小 sString = sString & "占用的磁盘空间为 : " & _ fo.Size & " 字节 " MsgBox sString ' 显示获得的文件信息End Sub

12.5 文件系统对象模型 (FSO)

Page 59: 第12章   文    件

www.themegallery.com59

4. 文件读 /写 使用 TextStream 对象进行文件的读写操作。 TextStream 对象与读 /写文件有关的方法见 P232表 12-8 。5. 关闭文件 关闭由 TextStream 对象打开的文件用 Close 方法。 例如 : tso.Close 。

12.5 文件系统对象模型 (FSO)

Page 60: 第12章   文    件

www.themegallery.com60

【例 12-12 】创建一个文件并写入一些信息,然后再将信息读出显示在消息框中。

Private Sub Command1_Click()

Dim fso, fo, tso, sString

Set fso =

_CreateObject("Scripting.FileSystemObject")

fso.CreateTextFile "c:\testfile.txt" ' 创建一个文件 ' 获得一个 File 对象的文件句柄 Set fo = fso.GetFile("c:\testfile.txt")

' 创建 TextStream 对象用于写 Set tso = fo.OpenAsTextStream(2)

' 在文件中写一个字符串 tso.Write " 用 TextStream 对象的 Write 、 Read 方法 ,演示文件的读写操作 "

tso.Close

12.5 文件系统对象模型 (FSO)

Page 61: 第12章   文    件

www.themegallery.com61

Set tso = fo.OpenAsTextStream() sString = tso.ReadLine ' 读一行 tso.Close MsgBox sString ' 显示读出的信息End Sub

12.5 文件系统对象模型 (FSO)

Page 62: 第12章   文    件

www.themegallery.com62

本 章 小 结 1. 文件的基本概念 文件 : 是指存储在外部介质上的数据的集合。 按存取方式分类 : 顺序文件 随机文件 二进制文件 2. 顺序文件 ASCII 文件 ; 只能按顺序存取记录 打开 : Open 语句 关闭 : Close 语句 写 : Write # 、 Print# 语句 读 : Input # 、 Line Input # 语

句 ,Input 、 InputB 函数

Page 63: 第12章   文    件

www.themegallery.com63

3. 随机文件 读写次序任意、记录长度相等 通常用自定义类型变量存取数据 打开 : Open 语句 关闭 : Close 语句 写 : Put 语句 读 : Get 语句 4. 文件系统控件 驱动器列表框 (DriveListBox): Drive属性 Change事件 目录列表框 (DirListBox): Path属性 Change事件

本 章 小 结

Page 64: 第12章   文    件

www.themegallery.com64

文件列表框 (FileListBox): Path属性 FileName属性 Pattern属性 Click 、 DblClick事件 5. 文件系统对象模型 FSO 管理驱动器 : Drive 对象 管理文件夹 : FileSystemObject 对象、 Folder 对象 管理文件 : FileSystemObject 对象、 File 对象

本 章 小 结