第 16 章 文件应用

61
第 16 第 第第第第 第第第第第3 第第第第 第第第第第第第第第 ( 第第第 , 第第 , 第第第第 ) Windows 第第第第第第第第第 第第第第第第第第第第 第第第第第第 ,() 第第第第第第第第第第 第第第第第第第第第第第第 第第第 第第 第第第 (、、、) 第第第第 第第第第第第第第 第第第第第 第第第第第第第 第第第第第第第第第第第第第 ()

Upload: kana

Post on 15-Jan-2016

76 views

Category:

Documents


0 download

DESCRIPTION

第 16 章 文件应用. 有关的内容: 3 个文件系统的可视化的标准控件 ( 驱动器 , 目录 , 文件列表 ) Windows 通用文件对话框控件,用于指定或选择文件(打开或保存) 操作文件的语句和函数(学习不同类型文件的打开、关闭、读、写等) 和文件系统有关的语句和函数 使用文件系统对象来访问文件(学习有关对象的属性和方法). 文件的类型. 文件就是保存在磁盘上的字节,不同类型的文件有不同的结构,即字节之间的关系,以及每个字节表示什么内容(是整数、字符串还是数据记录等),根据这些结构我们将文件的类型划分为三类。 顺序文件 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 16 章  文件应用

第 16 章 文件应用有关的内容:• 3 个文件系统的可视化的标准控件 ( 驱动器 , 目

录 , 文件列表 )

• Windows 通用文件对话框控件,用于指定或选择文件(打开或保存)

• 操作文件的语句和函数(学习不同类型文件的打开、关闭、读、写等)

• 和文件系统有关的语句和函数• 使用文件系统对象来访问文件(学习有关对象

的属性和方法)

Page 2: 第 16 章  文件应用

文件的类型• 文件就是保存在磁盘上的字节,不同类型的文件有不同的结构,

即字节之间的关系,以及每个字节表示什么内容(是整数、字符串还是数据记录等),根据这些结构我们将文件的类型划分为三类。

1. 顺序文件– 顺序文件保存为一个连续块,块中的字节代表的都是文本字

符,读取和写入都是字符或字符串类型数据( ANSI 字符),而且都是按照顺序进行的。

2. 随机文件– 当一个文本文件中含有多条记录,而且每条记录有固定统一

的长度时,可以实现记录的随机访问。不一定是纯文本。3. 二进制文件– 二进制文件则适用于读写任意结构的文件。二进制文件中的

字节可以代表任何东西。只有精确地知道数据是如何写到文件中后,才可能对它进行正确的读取或检索。

Page 3: 第 16 章  文件应用

文件访问的步骤

1) 使用 Open 语句打开文件 , 指定文件号和存取方式

2) 从文件中读取数据到变量中3) 使用或处理变量中的数据 , 或者保存变

量中的数据到其它文件中4) 文件操作结束 , 使用 Close 语句关闭文

Page 4: 第 16 章  文件应用

打开顺序文件Open filename For [Input|Output|Append] As [#] FileNumber• FileNumber 指定一个有效的文件号, 1~511 ,使用 Fr

eeFile 函数可以得到下一个可用的文件号,此后对文件的访问基于该文件号。

可执行以下操作:• Input :从文件中读取字符• Output :向文件输出字符,文件原来的内容丢失• Append :将字符追加到文件的最后,原内容保留

Input 操作的前提条件是文件必须存在;Output 和 Append 则可以自动先创建再打开。

Page 5: 第 16 章  文件应用

• Input() 函数,读取任意数量的字符到变量中Text1.Text = Input(LOF(filenum), filenum)

第一个参数指读取字符数量,第二个参数指定文件号• Input# 语句,从文件中读取数据到一个或多个变量

中,必须是指定格式或由 Write# 语句写入的数据Input #1, MyName, MyNumber

• LineInput# 语句 , 从文件中读取一行,给字符串变量Line Input #filenum, LineString

Text1.Text = Text1.Text + LineString+Chr(13) + Chr(10)

读取顺序文件

Page 6: 第 16 章  文件应用

从文件中读取一行• 【例】读取文件 test.txt ,结果置于一个文本框中。Open "d:\test.txt" For Input As 1

Do Until EOF(1)

Line Input #1, NextLine

Text1.Text = Text1.Text + NextLine + vbCrLf

Loop

Close #1

• 尽管 Line Input # 到达回车换行时它会识别行尾,但是,当它把整行字符串读入变量时,不会包括回车换行。如果要保留该回车换行,必须在代码中添加。

Page 7: 第 16 章  文件应用

• Print# 语句,向文件中写入一行Print #filenumber, [outputlist]第一个参数指定文件号 , 第二个参数为表达式

Print #1, "This is a test"Print #1, ‘ 写入一个空行Print #1, StuNum; Tab; StuNamePrint #1, Spc(5) ; "Hello"Print #1, Tab(10) ; "Hello"

• Write# 语句 , 将数据写入文件(区别数据类型)Write #filenumber, [outputlist]

Write #1, “Hello World”, 234Write #1, strName 与 Print 的区别:

•值之间使用逗号分隔•字符串使用引号括起

写入顺序文件

Page 8: 第 16 章  文件应用

修改顺序文件

• 对于顺序文件没有提供直接修改的方法,如果要修改一个文件的内容,一般的步骤是:

• 1)      以 Input 方式打开文件;• 2)      读取文件的内容到某个变量中,关闭文件;• 3)      修改变量的值;• 4)      以 Output 方式打开文件;• 5)      将变量值写入到文件中,关闭文件结束。

Page 9: 第 16 章  文件应用

• Close# 语句Close #1 ' 关闭 1 号文件Close #1, #2, #4 ' 关闭 1 号、 2 号和 4 号文件Close ' 关闭所有打开的文件

• 执行 Close 语句后,文件与其文件号之间的关联将终结,同样的文件号可以在后面的程序中继续使用。

• 当对文件进行写入操作时,只有使用了关闭命令,才会真正将缓冲区的文件内容写入到磁盘的文件中,同时所有与该文件相关联的缓冲区空间都被释放。

关闭顺序文件

Page 10: 第 16 章  文件应用

访问顺序文件示例 1

• 【例】读取任意指定的文本文件,进行如下处理:删除一个段落中的所有硬回车,只保留段落与段落之间的回车符(假设:某一行的第一个字符前有四个半角空格,就代表一个段落的开始)。

Page 11: 第 16 章  文件应用

访问顺序文件示例Dim strLine As String ‘ 用于保存每次读出的一行文本Dim fileNo As Integer ' 当前打开文件的文件号

Text1.Text = "" Text2.Text = "" fileNo = FreeFile ' 获取当前可用的文件号 Open “d:\a.txt” For Input As fileNo Do While Not EOF(fileNo) ' 按行循环读出文件内容 Line Input #fileNo, strLine Text1.Text = Text1.Text & strLine & vbCrLf If Left(strLine, 4) = " " Then ' 行前有四个空格 Text2.Text = Text2.Text & vbCrLf & strLine Else Text2.Text = Text2.Text & strLine End If Loop Close #fileNo

Page 12: 第 16 章  文件应用

访问顺序文件示例 ' 将处理后的文本写入文件 Open “d:\a.txt” For Output As fileNo

Print #fileNo, Text2.Text

Close #fileNo

Page 13: 第 16 章  文件应用

访问顺序文件示例 2• 【例】将两个文本文件进行合并。如: 1.txt + 2.txt -> 3.txt Dim f_in As Integer, f_out As Integer, str As String f_out = FreeFile() ' 打开合并后的文件用于写 Open App.Path & "\all.txt" For Output As f_out ' 打开第一个文件用于读,并写入到合并文件中 f_in = FreeFile() Open App.Path & "\1.txt" For Input As f_in Do While Not EOF(f_in) Line Input #f_in, str Print #f_out, str Loop Close #f_in ' 打开第二个文件用于读,并写入到合并文件中 Open App.Path & "\2.txt" For Input As f_in Do While Not EOF(f_in) Line Input #f_in, str Print #f_out, str Loop Close #f_in Close #f_out MsgBox "完成 !"

Page 14: 第 16 章  文件应用

访问顺序文件示例 3• 【例】进行全班考试成绩统计,计算平均分、最高分、

最低分。成绩存放在 score.txt 文件中 ( 以空格分开 ) 。Dim f1 As Integer, i As Integer, num As Integer, score(50) As IntegerDim str As String, strArray() As String num = 0 ‘计数,统计成绩个数 ‘打开分数文件,逐行读取并转换到数组中 f1 = FreeFile() Open App.Path & "\score.txt" For Input As f1 Do While Not EOF(f1) Line Input #f1, str ‘每行按照空格切分字符串 , 切分结果在字符串数组 strArray 中 strArray = Split(str, " ") '全部分数转换后存放到 score 数组中 For i = 0 To UBound(strArray) score(num) = CInt(strArray(i)) num = num + 1 Next Loop Close f1

Page 15: 第 16 章  文件应用

访问顺序文件示例 3 min = 100 max = 0 For i = 0 To num - 1 sum = sum + score(i) If score(i) > max Then max = score(i) If score(i) < min Then min = score(i) '求各分数段人数 If score(i) < 60 Then c1 = c1 + 1 ElseIf score(i) < 70 Then c2 = c2 + 1 ElseIf score(i) < 80 Then c3 = c3 + 1 ElseIf score(i) < 90 Then c4 = c4 + 1 Else c5 = c5 + 1 End If Next avg = sum / num

Page 16: 第 16 章  文件应用

文件长度和中文字符 *

• 获取文件长度– 文件打开时: LOF(filenumber) ,如: LOF(1)– 文件没有打开是: FileLen(filename) ,如: FileLen(“c:\a.txt”)

• 文件长度:返回的是文件中字节的个数,而不是字符个数– 英文单字节编码系统( ANSI ):一个字符就是一个字节– 中英文混合编码系统( DBCS ):中文两个字节,英文一个字节– 统一双字节编码系统( Unicode ):每个字符都占用两个字节, VB 所有内部操作以此为基础

• 但是目前的文本文件基本上是采用 DBCS 。 VB 根据长度读取文件时,有两种方式:– Input(20, 1) :这是按照字符的个数读取,然后自动转换为 Unicode 。– InputB(20, 1) :按字节的个数读取,不转换为 Unicode(需要用 StrConv 函

数 )

• 同样,字符串长度有两种方式:– Len(“你好 Hello”) 结果是 7 (字符的个数)– LenB (“你好 Hello”) 结果是 14 (字节的个数)

Page 17: 第 16 章  文件应用

访问随机文件• 随机文件由记录构成,每个记录由定长的字段构成,这样很容易随机找到某个记录的某个字段

• 随机文件中的字节构成相同的一些记录,每个记录包含一个或多个字段。

• 为了完整地定义随机文件中的记录,我们需要用户自定义类型。因为所有记录是同样的长度,所以所有字符串字段都必须使用定长字符串类型。例如,课程记录由三个字段组成的自定义类型 Course 来描述,每条记录的总长度为 32个字节。

Type Course Name As String * 20

TeacherName As String * 10 ClassHours As Integer

End Type

Page 18: 第 16 章  文件应用

打开随机文件• 随机文件打开后既可以写,同时又允许读,这和顺

序文件每次打开只能执行某一种操作不同,这种优越性就是固定了每个记录的长度所带来的。

Open filename [For Random] As number Len = reclength

• 表达式 Len = reclength 指定了记录的长度,每次读写操作以该长度为单位进行。一般指定 reclength为自定义类型变量的长度,可利用 Len 函数取得

• 如果 reclength比记录的实际长度短,则出错。比实际长度长,可写,但浪费了空间Reclen = Len(Stu)

Open file1 For Random As filenum len = Reclen

RecCount = LOF(filenum) / Reclen

Page 19: 第 16 章  文件应用

Get filenumber, recnumber, varname• filenumber :打开的顺序文件的文件号• recnumber :要读取的记录号,如省略则随上次

记录向下• varname : 读入的变量名• 例如,将第 10 条记录取出,存放到变量 Stu 中:

Get FileNum, 10, Stu

读取记录

Page 20: 第 16 章  文件应用

Put [#]filenumber, [recnumber], varname• Recnumber :指定记录号。它是一个可选项,如果指

定了记录号,就代表从指定的记录号所在位置开始写,如果省略则表示在上一个 put 语句紧邻的下一个记录位置开始写入,实质上记录号指定了记录写入文件的位置。

• Varname :记录变量,该变量数据将写入文件。• 比如将变量 myClass 作为文件的第三个记录写入进去:

myClass.Name = "VB程序设计 "

myClass.TeacherName = "张三 "

myClass.ClassHours = 40

Put #FileNum, 3, myClass

写入记录

Page 21: 第 16 章  文件应用

• 替换随机文件中的记录,即修改记录原来的内容。替换操作不会改变文件的结构和长度。

• 仍然使用 Put 语句,如修改第 10 条记录的姓名字段:Get FileNum, 10, Stu

Stu.Name = “Jonh”

Put FileNum, 10, Stu

替换记录

Page 22: 第 16 章  文件应用

• 在任何位置都可以添加新记录,即写入记录,而不论该位置之前是否存在非空记录。

• 如果需要紧邻上一记录,则只要保证记录号增 1 。设 Reccount 为原来的记录数: Reccount = Reccount + 1

Put FileNum, Reccount, Stu

• LOF(filenumber) :可以返回文件的大小,可以用于计算随机文件的记录个数:recCount = LOF(1) / recLength + 1

添加记录

Page 23: 第 16 章  文件应用

• 删除记录会改变文件长度,以上简单操作无法完成。

• 需要使用一个临时文件,将原文件中的有效记录读取出来,写入到临时文件中,再将临时文件改名即可:

1. Get :使用 Get 语句从原文件中读记录2. Put :使用 Put 语句写部分记录到临时文件3. Kill :使用 Kill 语句删除原文件4. Name… As … :将临时文件换名为原文件名

删除记录

Page 24: 第 16 章  文件应用

• 【例】编写程序,完成一个学期教学计划的安排,包括:从课程列表框中选择一门课程,从教师列表框选择任课教师,输入课时,然后添加到课程文件中。

• 为了提高灵活性,课程名和教师名存放在一个文本文件中,程序执行前,用户可以自行修改。

访问随机文件示例

Page 25: 第 16 章  文件应用

访问随机文件示例‘定义教学计划的记录类型Private Type Course Name As String * 20 TeacherName As String * 10 ClassHours As IntegerEnd Type ‘窗体加载事件中进行界面的初始化。首先初始化课时组合框 cboHours.AddItem "24" cboHours.AddItem "32" cboHours.AddItem "40" cboHours.AddItem "50" cboHours.AddItem "60" cboHours.ListIndex = 3

Page 26: 第 16 章  文件应用

访问随机文件示例 Dim strLine As String ‘ 从课程文件中读取所有课程 Open App.Path & "\class.txt" For Input As 1 Do While Not EOF(1) Line Input #1, strLine lstClass.AddItem strLine Loop Close (1) lstClass.ListIndex = 0 ‘ 从教师文件中读取所有教师 Open App.Path & "\teacher.txt" For Input As 1 Do While Not EOF(1) Line Input #1, strLine lstTeacher.AddItem strLine Loop Close (1) lstTeacher.ListIndex = 0

Page 27: 第 16 章  文件应用

访问随机文件示例 ' 添加课程信息到随机文件中Private Sub cmdAdd_Click()

Dim recNo As Integer

Dim recLength As Integer

Dim myCourse As Course

myCourse.Name = lstClass.Text ' 准备要写入文件的变量 myCourse.TeacherName = lstTeacher.Text

myCourse.ClassHours = CInt(cboHours.Text)

recLength = Len(myCourse) ' 计算记录的长度 Open App.Path & "\course.dat" For Random As 1 Len = recLength

recNo = LOF(1) / recLength + 1 ‘ 计算当前新记录的记录号 Put 1, recNo, myCourse

Close (1)

End Sub

Page 28: 第 16 章  文件应用

• 二进制文件中的字节可以代表任何数据(如非定长记录格式)。只有精确地知道数据是如何写到文件中后,才可能对它进行正确的读取或检索,否则只能靠人工的猜测和推理。因此对于不想直接公开的内容,程序员通常会以二进制文件来保存。二进制访问需要了解每个字节代表的含义,只有掌握了文件格式后,才能编写程序正确地读出文件。

• 打开文件Open filename For Binary As number

• 读写文件Get|Put number , recnumber, varname

访问二进制文件

Page 29: 第 16 章  文件应用

文件系统的有关函数

• 与驱动器、目录和文件有关的操作,比如创建目录,复制、删除文件,文件改名等。这些函数不涉及文件内容的操作。

• 如何读出文件内容,或写一个文件以后再介绍。

Page 30: 第 16 章  文件应用

改变当前驱动器

ChDrive drive

• drive 必选参数 , 指定驱动器名 , 为“”则不变

• drive 如果含多个字符 , 则取第一个例 :

ChDrive “D”

Page 31: 第 16 章  文件应用

取当前目录CurDir [(drive)]

• drive: 字符串表达式 , 指定驱动器名• 无参数 , 或 drive=“”, 返回当前驱动器路径

例 :MyPath=CurDir

MyPath=CurDir(“C”)

MyPath=CurDir(“D”)

Page 32: 第 16 章  文件应用

ChDir path

• path 必选参数 , 指定默认目录名 , 可包含驱动器名

• 如果不指定驱动器 , 则在当前驱动器上改变目录

例 :ChDir “Vbbooks”

ChDir “D:\Temp”

改变驱动器的默认目录 , 但不改变默认驱动器

改变当前目录

Page 33: 第 16 章  文件应用

App.Path– App 对象是一个全局对象 , 不需要声明 , 指

定应用程序的有关信息– Path, 返回应用程序执行文件路径– Title, 返回应用程序在任务列表中的标题– EXTName, 返回应用程序的执行文件名

得到当前可执行文件路径

Page 34: 第 16 章  文件应用

MkDir path– path 必选参数 , 指定新目录名 , 可包含驱动

器名– 如果不指定驱动器 , 则在当前驱动器上建目录

RmDir path– 同上

例 :MkDir “wxm”

RmDir “D:\data”

删除目录 , 必须是该目录是一个空目录 , 没有文件

建立和删除目录

Page 35: 第 16 章  文件应用

Kill filename– filename 必选参数 , 指定文件名 , 可包含路径

– filename 可以是包含通配符的字符串

例 :Kill “D:\temp\test.dat”

Kill “D:\temp\*.tmp”

删除文件 , 必须是该文件没有正在使用

删除文件

Page 36: 第 16 章  文件应用

SetAttr pathname, attributes– pathname 必选参数 , 指定文件名– attributes 常数或数值表达式 , 指定文件属性 ,

属性取值有 :vbNormal, vbReadOnly, vbHidden, vbSystem,

例 :SetAttr “D:\data.txt”, vbReadOnly + vbHidden

设置文件属性 , 必须是该文件没有正在使用 ( 打开 )

读取文件属性,使用 GetAttr(pathname) 函数

设置文件属性

Page 37: 第 16 章  文件应用

FileCopy source, destination

Dim SourceFile, DestinationFile SourceFile = “名单 .txt" DestinationFile = “名单 2.txt“FileCopy SourceFile, DestinationFile

文件拷贝

Page 38: 第 16 章  文件应用

Name oldpathname As newpathname

重新命名文件并将其移动到一个不同的目录或文件夹中。

• Name 可跨驱动器移动文件。• Name 不能创建新文件、目录或文件夹• 参数不能包括多字符 (*) 和单字符 (?) 的统配

文件改名

Page 39: 第 16 章  文件应用

返回指定参数条件的文件名或目录名Dir[(pathname[, attributes])] • Pathname :目录名,可以含有通配符• Attributes :文件属性

– vbNormal : 0– vbReadOnly : 1 只读– vbHidden : 2隐藏– VbSystem : 4 系统– vbVolume : 8卷标– vbDirectory : 16 包含目录

DIR 函数

Page 40: 第 16 章  文件应用

MyFile = Dir(“*.TXT”, vbHidden) ‘ 取第一个隐含 TXT 文件名MyFile = Dir ‘ 取下一个

MyPath = “c:\” ‘ 取出 C 驱动器下所有一级目录名并显示MyName = Dir(MyPath, vbDirectory)

Do While MyName <> ""

If MyName <> "." And MyName <> ".." Then

If GetAttr(MyPath & MyName) = vbDirectory Then

Debug.Print MyName

End If

MyName = Dir

End If

Loop

DIR 函数

Page 41: 第 16 章  文件应用

• FileDateTime(Filename) :文件创建或最后修改日期和时间

• FileLen(Filename) :返回打开前文件的长度(字节数• FreeFile() :返回一个可用的文件号• EOF(filenumber) :返回布尔值表明是否到达文件尾• LOF(filenumber) :返回文件的大小• Loc(filenumber) :返回文件当前的读 / 写位置• Seek(filenumber) :返回文件的当前位置• Seek filenumber, position :设置文件的当前位置,影响下一次的读 / 写操作

其它函数和语句

Page 42: 第 16 章  文件应用

使用对象类访问文件•虽然以上列出的一系列语句或函数可以全面操

作驱动器、目录或文件,但它们很分散,难于记忆和使用。

• VB 提供了一个完整的对象模型,该模型中包含了与驱动器、目录和文件等元素完全对应的一组对象,利用各个对象的属性和方法可以方便地获取文件系统的信息、处理目录和文件、以及读写顺序文件。

• 这就是 File System Object ( FSO )对象模型

Page 43: 第 16 章  文件应用

FSO 对象模型中主要的 5 个对象:• Drive 对象:读取驱动器信息• Folder 对象:管理文件夹,读取文件夹信息• Files 对象:管理文件,读取文件信息• TextStream 对象:主要用于读写文件• FileSystem Object 对象:提供对驱动器、文

件夹和文件的各种操作,核心对象。该对象建立在以上对象的基础之上,比如很多方法是复制了其它对象的方法,还提供方法创建生成以上对象。

File System Objects 对象模型

Page 44: 第 16 章  文件应用

使用类库(非可视化对象)• FSO 对象不是一个可见的控件对象,不能

通过部件添加到工程中,需要引用类库( Class Library )

• 类库示对象类的集合,可以为开发者提供大量制作好的可以直接使用的对象

在工程中添加对象类引用–“工程”菜单中,选择“引用”命令– 选定类库名称左边的复选框–单击“确定”按钮

Page 45: 第 16 章  文件应用

加载 FSO 对象模型• FSO 对象模型包含在一个称为 Scripting 的类型库中,此类型库位于 Scrrun.Dll 文件中。要使用该类型库,必须首先在工程中引用此文件,操作方法如下:

1. 执行【工程】→【引用】菜单命令,打开“引用”对话框;

2. 在对话框中的可引用类型库列表中选中“Microsoft Scripting Runtime”项并确定;

• 使用“对象浏览器”可以查看其对象、集合、属性、方法、事件以及它的常数,同时在声明变量时,输入 As 关键字后,该类型库中的对象类型会自动显示在数据类型提示列表中。

Page 46: 第 16 章  文件应用

该对象是 FSO 对象模型中的核心对象, FSO编程的主要步骤:(1) 在“工程 | 引用”中选择“ Microsoft Scripting

runtime”

(2) 创建一个 FileSystemObject 对象(3) 通过读取新对象的属性值获取信息(4)调用 FileSystemObject 对象中的方法来创建一

个新的对象,如 Files 对象、 Drive 对象

FileSystemObject 对象

Page 47: 第 16 章  文件应用

方法一:使用 New 关键字Dim oFSO as FileSystemObject ‘声明对象Set oFSO = New FileSystemObject ‘ 创建对象或

Dim oFSO as New FileSystemObject ‘声明并创建对象

方法二:使用 CreateObject 函数Dim oFSO as FileSystemObject ‘声明对象Set oFSO=CreateObject(“Scripting.FileSystemObject”)

创建一个 FileSystemObject 对象

对象其实就象 C 语言中的指针,声明时并没有空间,也没有内容,是一个空值。只有创建后才能使用(等同于让指针指向一个有意义的空间)

Page 48: 第 16 章  文件应用

【例】窗体加载后,输出系统各驱动器的容量和剩余可用空间。

Private Sub Form_Load()

Dim objFso As New FileSystemObject

Dim strInfo As String, d

On Error Resume Next

For Each d In objFso.Drives

strInfo = d.DriveLetter & " : "

strInfo = strInfo & " 全部空间 =" & d.TotalSize

strInfo = strInfo & " 可用空间 =" & d.AvailableSpace

Debug.Print strInfo

Next

End Sub

访问驱动器

Page 49: 第 16 章  文件应用

Drives 属性:是一个驱动器对象的集合,即 Drive 对象

的集合。Drive 对象的主要属性有:• AvailableSpace :驱动器上的可用空间• DriveLetter :驱动器号(只读)• DriveType :驱动器类型• FileSystem :文件系统的类型• FreeSpace :可用空间• VolumnName :卷标名• IsReady :是否准备好

FileSystemObject 对象的属性

Page 50: 第 16 章  文件应用

(1) DriveExist 方法:返回真存在,否则不存在 oFSO.DriveExists(“d”)

(2) GetDrive 方法:返回一个指定的 Drive 对象 set oDrive = oFSO.GetDrive(“c:”)

(3) GetDriveName 方法:从指定的路径名中返回驱动器名,但不检查是否存在

oFSO.GetDriveName(“d:\vb6”)

使用 FileSystemObject 访问驱动器

Page 51: 第 16 章  文件应用

• 文件夹本身的信息可以通过 Folder 对象来访问,部分文件夹的处理由 FileSystemObject 对象的方法来完成。

Folder 对象的主要属性: Attributes :设置或返回文件夹的属性。如只读、隐藏等 DateCreated :返回创建日期和时间,是只读属性 Drive :返回文件夹所在的驱动器符号,是只读属性 Files :返回文件夹下由所有 File 对象组成的 Files集合 IsRootFolder :指定的文件夹是否是根文件夹 Name :返回文件夹名,重新设置该属性意味着改名 ParentFolder/SubFolders :返回指定文件夹的父 /子文件夹对象 Path :返回指定文件夹的路径 Size :返回以字节为单位的包含在文件夹中所有文件和子文件夹

的大小

访问文件夹

Page 52: 第 16 章  文件应用

(1) FolderExist 方法:返回真假值x = oFSO.FolderExist(“d:\vb6\samples”)

(2) GetFolder 方法:返回一个指定的 Folder 对象set oFoldert = oFSO.GetFolder(“d:\vb6\samples”)

当指定的文件夹不存在时,该方法会出错

FileSystemObject 对象访问文件夹( 一 )

Page 53: 第 16 章  文件应用

【例】检查当前目录下是否存在文件夹myVB ,并查看其大小:Dim objFso As New FileSystemObject

Dim objFolder As Folder, FileName As String

FileName = App.path & “\myVB”

If objFso.FolderExists(FileName) Then

Set objFolder = objFso.GetFolder(FileName)

Debug.Print objFolder.Size

Else

Debug.Print " 该文件夹不存在! "

End If

访问文件夹示例

Page 54: 第 16 章  文件应用

(1)CopyFolder 方法:拷贝文件夹 oFSO.CopyFolder source, dest [, overwrite]

(2)CreateFolder 方法:创建文件夹 oFSO.CopyFolder foldername

(3)DeleteFolder 方法:删除文件夹 oFSO.DeleteFolder foldername [,force]

(4)MoveFolder 方法:移动文件夹 oFSO.MoveFolder source, destination

FileSystemObject 对象访问文件夹( 二 )

Page 55: 第 16 章  文件应用

(1) GetParentFolderName 方法:获取父文件夹 set oFolder = oFSO.GetParentFolderName(path)

(2) GetSpecialFolder 方法 set oFolder = oFSO.GetSpecialFolder(folderspec)

folderspec 取值:• WindowsFolder 0 Windows 操作系统文件夹• SystemFolder 1 系统文件夹• TemporaryFolder 2 系统临时文件夹

FileSystemObject 对象访问文件夹( 三 )

Page 56: 第 16 章  文件应用

三种对象来支持文件的访问:• 文件本身的信息可以通过 File 对象来访问,

如文件的大小、创建日期、文件属性等,该对象还提供文件的复制、移动和删除等。

• 也可以通过 FileSystemObject 对象来执行文件的创建、复制、删除等操作。

• 文件的读写由 TextStream 对象来支持,但是该对象仅用于文本文件的操作。

访问文件

Page 57: 第 16 章  文件应用

(1) FileExist 方法:返回真假(2) GetFile 方法:返回一个指定的 File 对象(3) GetFileName 方法:从指定路径名中返回

文件名(4) OpenTextFile 方法:打开一个文本文件,返回

一个 TextStream 对象

FileSystemObject 对象访问文件( 一 )

Page 58: 第 16 章  文件应用

Dim oFSO As New FileSystemObject

Dim oTS As TextStream

‘创建一个新的文本文件,如果已经存在则覆盖Set oTS = oFSO.CreateTextFile("c:\test.txt", True)

oTS.WriteLine("This is a test.")

oTS.Close

Set oTS = Nothing

‘打开文本文件,读取全部内容Set oTS = oFSO.OpenTextFile("c:\test.txt", ForReading)

Text1 = oTS.ReadAll()

oTS.Close

Set oTS = Nothing

TextStream 对象示例

Page 59: 第 16 章  文件应用

• 先创建 TextStream 对象供读 Set oTS=oFSO.OpenTextFile(“a.txt",ForReading)

• Read :从一个文件中读取指定数量的字符strTemp = oTS.Read(10)

• ReadLine :读取一整行,不包括换行符strTemp = oTS.ReadLine

• ReadAll :读取一个文本文件的所有内容• Skip :跳过指定数量的字符

oTS.Skip(10)• SkipLine :跳过一行

使用 TextStream 对象读文件

Page 60: 第 16 章  文件应用

• 先创建 TextStream 对象供写 Set oTS=oFSO.OpenTextFile(“a.txt",ForWriting)

或 Set oTS=oFSO.OpenTextFile(“a.txt",ForAppending)

• Write :向一个文件中写入指定的字符oTS.Write(“Hello”)

oTS.Write(strTemp)• WriteLine :向一个文件中写入指定的字符和换行符

oTS.WriteLine(strTemp)• WriteBlankLine :向一个文件中写入指定数量的空行

oTS.WriteBlankLine(5)

使用 TextStream 对象写文件

Page 61: 第 16 章  文件应用

(1) CreateTextFile 方法:创建一个文本文件,返回一个 TextStream 对象CreateTextFile(filename[, overwrite[, unicode]])

(2) CopyFile 方法:复制一个文件CopyFile source, destination[, overwrite]

(3) MoveFile 方法:移动一个文件object.MoveFile source, destination

(4) DeleteFile 方法:删除一个文件object.DeleteFile filespec[, force]

FileSystemObject 对象访问文件夹( 二 )