第 16 章 文件应用
DESCRIPTION
第 16 章 文件应用. 有关的内容: 3 个文件系统的可视化的标准控件 ( 驱动器 , 目录 , 文件列表 ) Windows 通用文件对话框控件,用于指定或选择文件(打开或保存) 操作文件的语句和函数(学习不同类型文件的打开、关闭、读、写等) 和文件系统有关的语句和函数 使用文件系统对象来访问文件(学习有关对象的属性和方法). 文件的类型. 文件就是保存在磁盘上的字节,不同类型的文件有不同的结构,即字节之间的关系,以及每个字节表示什么内容(是整数、字符串还是数据记录等),根据这些结构我们将文件的类型划分为三类。 顺序文件 - PowerPoint PPT PresentationTRANSCRIPT
第 16 章 文件应用有关的内容:• 3 个文件系统的可视化的标准控件 ( 驱动器 , 目
录 , 文件列表 )
• Windows 通用文件对话框控件,用于指定或选择文件(打开或保存)
• 操作文件的语句和函数(学习不同类型文件的打开、关闭、读、写等)
• 和文件系统有关的语句和函数• 使用文件系统对象来访问文件(学习有关对象
的属性和方法)
文件的类型• 文件就是保存在磁盘上的字节,不同类型的文件有不同的结构,
即字节之间的关系,以及每个字节表示什么内容(是整数、字符串还是数据记录等),根据这些结构我们将文件的类型划分为三类。
1. 顺序文件– 顺序文件保存为一个连续块,块中的字节代表的都是文本字
符,读取和写入都是字符或字符串类型数据( ANSI 字符),而且都是按照顺序进行的。
2. 随机文件– 当一个文本文件中含有多条记录,而且每条记录有固定统一
的长度时,可以实现记录的随机访问。不一定是纯文本。3. 二进制文件– 二进制文件则适用于读写任意结构的文件。二进制文件中的
字节可以代表任何东西。只有精确地知道数据是如何写到文件中后,才可能对它进行正确的读取或检索。
文件访问的步骤
1) 使用 Open 语句打开文件 , 指定文件号和存取方式
2) 从文件中读取数据到变量中3) 使用或处理变量中的数据 , 或者保存变
量中的数据到其它文件中4) 文件操作结束 , 使用 Close 语句关闭文
件
打开顺序文件Open filename For [Input|Output|Append] As [#] FileNumber• FileNumber 指定一个有效的文件号, 1~511 ,使用 Fr
eeFile 函数可以得到下一个可用的文件号,此后对文件的访问基于该文件号。
可执行以下操作:• Input :从文件中读取字符• Output :向文件输出字符,文件原来的内容丢失• Append :将字符追加到文件的最后,原内容保留
Input 操作的前提条件是文件必须存在;Output 和 Append 则可以自动先创建再打开。
• 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)
读取顺序文件
从文件中读取一行• 【例】读取文件 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 # 到达回车换行时它会识别行尾,但是,当它把整行字符串读入变量时,不会包括回车换行。如果要保留该回车换行,必须在代码中添加。
• 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 的区别:
•值之间使用逗号分隔•字符串使用引号括起
写入顺序文件
修改顺序文件
• 对于顺序文件没有提供直接修改的方法,如果要修改一个文件的内容,一般的步骤是:
• 1) 以 Input 方式打开文件;• 2) 读取文件的内容到某个变量中,关闭文件;• 3) 修改变量的值;• 4) 以 Output 方式打开文件;• 5) 将变量值写入到文件中,关闭文件结束。
• Close# 语句Close #1 ' 关闭 1 号文件Close #1, #2, #4 ' 关闭 1 号、 2 号和 4 号文件Close ' 关闭所有打开的文件
• 执行 Close 语句后,文件与其文件号之间的关联将终结,同样的文件号可以在后面的程序中继续使用。
• 当对文件进行写入操作时,只有使用了关闭命令,才会真正将缓冲区的文件内容写入到磁盘的文件中,同时所有与该文件相关联的缓冲区空间都被释放。
关闭顺序文件
访问顺序文件示例 1
• 【例】读取任意指定的文本文件,进行如下处理:删除一个段落中的所有硬回车,只保留段落与段落之间的回车符(假设:某一行的第一个字符前有四个半角空格,就代表一个段落的开始)。
访问顺序文件示例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
访问顺序文件示例 ' 将处理后的文本写入文件 Open “d:\a.txt” For Output As fileNo
Print #fileNo, Text2.Text
Close #fileNo
访问顺序文件示例 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 "完成 !"
访问顺序文件示例 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
访问顺序文件示例 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
文件长度和中文字符 *
• 获取文件长度– 文件打开时: 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 (字节的个数)
访问随机文件• 随机文件由记录构成,每个记录由定长的字段构成,这样很容易随机找到某个记录的某个字段
• 随机文件中的字节构成相同的一些记录,每个记录包含一个或多个字段。
• 为了完整地定义随机文件中的记录,我们需要用户自定义类型。因为所有记录是同样的长度,所以所有字符串字段都必须使用定长字符串类型。例如,课程记录由三个字段组成的自定义类型 Course 来描述,每条记录的总长度为 32个字节。
Type Course Name As String * 20
TeacherName As String * 10 ClassHours As Integer
End Type
打开随机文件• 随机文件打开后既可以写,同时又允许读,这和顺
序文件每次打开只能执行某一种操作不同,这种优越性就是固定了每个记录的长度所带来的。
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
Get filenumber, recnumber, varname• filenumber :打开的顺序文件的文件号• recnumber :要读取的记录号,如省略则随上次
记录向下• varname : 读入的变量名• 例如,将第 10 条记录取出,存放到变量 Stu 中:
Get FileNum, 10, Stu
读取记录
Put [#]filenumber, [recnumber], varname• Recnumber :指定记录号。它是一个可选项,如果指
定了记录号,就代表从指定的记录号所在位置开始写,如果省略则表示在上一个 put 语句紧邻的下一个记录位置开始写入,实质上记录号指定了记录写入文件的位置。
• Varname :记录变量,该变量数据将写入文件。• 比如将变量 myClass 作为文件的第三个记录写入进去:
myClass.Name = "VB程序设计 "
myClass.TeacherName = "张三 "
myClass.ClassHours = 40
Put #FileNum, 3, myClass
写入记录
• 替换随机文件中的记录,即修改记录原来的内容。替换操作不会改变文件的结构和长度。
• 仍然使用 Put 语句,如修改第 10 条记录的姓名字段:Get FileNum, 10, Stu
Stu.Name = “Jonh”
Put FileNum, 10, Stu
替换记录
• 在任何位置都可以添加新记录,即写入记录,而不论该位置之前是否存在非空记录。
• 如果需要紧邻上一记录,则只要保证记录号增 1 。设 Reccount 为原来的记录数: Reccount = Reccount + 1
Put FileNum, Reccount, Stu
• LOF(filenumber) :可以返回文件的大小,可以用于计算随机文件的记录个数:recCount = LOF(1) / recLength + 1
添加记录
• 删除记录会改变文件长度,以上简单操作无法完成。
• 需要使用一个临时文件,将原文件中的有效记录读取出来,写入到临时文件中,再将临时文件改名即可:
1. Get :使用 Get 语句从原文件中读记录2. Put :使用 Put 语句写部分记录到临时文件3. Kill :使用 Kill 语句删除原文件4. Name… As … :将临时文件换名为原文件名
删除记录
• 【例】编写程序,完成一个学期教学计划的安排,包括:从课程列表框中选择一门课程,从教师列表框选择任课教师,输入课时,然后添加到课程文件中。
• 为了提高灵活性,课程名和教师名存放在一个文本文件中,程序执行前,用户可以自行修改。
访问随机文件示例
访问随机文件示例‘定义教学计划的记录类型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
访问随机文件示例 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
访问随机文件示例 ' 添加课程信息到随机文件中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
• 二进制文件中的字节可以代表任何数据(如非定长记录格式)。只有精确地知道数据是如何写到文件中后,才可能对它进行正确的读取或检索,否则只能靠人工的猜测和推理。因此对于不想直接公开的内容,程序员通常会以二进制文件来保存。二进制访问需要了解每个字节代表的含义,只有掌握了文件格式后,才能编写程序正确地读出文件。
• 打开文件Open filename For Binary As number
• 读写文件Get|Put number , recnumber, varname
访问二进制文件
文件系统的有关函数
• 与驱动器、目录和文件有关的操作,比如创建目录,复制、删除文件,文件改名等。这些函数不涉及文件内容的操作。
• 如何读出文件内容,或写一个文件以后再介绍。
改变当前驱动器
ChDrive drive
• drive 必选参数 , 指定驱动器名 , 为“”则不变
• drive 如果含多个字符 , 则取第一个例 :
ChDrive “D”
取当前目录CurDir [(drive)]
• drive: 字符串表达式 , 指定驱动器名• 无参数 , 或 drive=“”, 返回当前驱动器路径
例 :MyPath=CurDir
MyPath=CurDir(“C”)
MyPath=CurDir(“D”)
ChDir path
• path 必选参数 , 指定默认目录名 , 可包含驱动器名
• 如果不指定驱动器 , 则在当前驱动器上改变目录
例 :ChDir “Vbbooks”
ChDir “D:\Temp”
改变驱动器的默认目录 , 但不改变默认驱动器
改变当前目录
App.Path– App 对象是一个全局对象 , 不需要声明 , 指
定应用程序的有关信息– Path, 返回应用程序执行文件路径– Title, 返回应用程序在任务列表中的标题– EXTName, 返回应用程序的执行文件名
得到当前可执行文件路径
MkDir path– path 必选参数 , 指定新目录名 , 可包含驱动
器名– 如果不指定驱动器 , 则在当前驱动器上建目录
RmDir path– 同上
例 :MkDir “wxm”
RmDir “D:\data”
删除目录 , 必须是该目录是一个空目录 , 没有文件
建立和删除目录
Kill filename– filename 必选参数 , 指定文件名 , 可包含路径
– filename 可以是包含通配符的字符串
例 :Kill “D:\temp\test.dat”
Kill “D:\temp\*.tmp”
删除文件 , 必须是该文件没有正在使用
删除文件
SetAttr pathname, attributes– pathname 必选参数 , 指定文件名– attributes 常数或数值表达式 , 指定文件属性 ,
属性取值有 :vbNormal, vbReadOnly, vbHidden, vbSystem,
例 :SetAttr “D:\data.txt”, vbReadOnly + vbHidden
设置文件属性 , 必须是该文件没有正在使用 ( 打开 )
读取文件属性,使用 GetAttr(pathname) 函数
设置文件属性
FileCopy source, destination
Dim SourceFile, DestinationFile SourceFile = “名单 .txt" DestinationFile = “名单 2.txt“FileCopy SourceFile, DestinationFile
文件拷贝
Name oldpathname As newpathname
重新命名文件并将其移动到一个不同的目录或文件夹中。
• Name 可跨驱动器移动文件。• Name 不能创建新文件、目录或文件夹• 参数不能包括多字符 (*) 和单字符 (?) 的统配
符
文件改名
返回指定参数条件的文件名或目录名Dir[(pathname[, attributes])] • Pathname :目录名,可以含有通配符• Attributes :文件属性
– vbNormal : 0– vbReadOnly : 1 只读– vbHidden : 2隐藏– VbSystem : 4 系统– vbVolume : 8卷标– vbDirectory : 16 包含目录
DIR 函数
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 函数
• FileDateTime(Filename) :文件创建或最后修改日期和时间
• FileLen(Filename) :返回打开前文件的长度(字节数• FreeFile() :返回一个可用的文件号• EOF(filenumber) :返回布尔值表明是否到达文件尾• LOF(filenumber) :返回文件的大小• Loc(filenumber) :返回文件当前的读 / 写位置• Seek(filenumber) :返回文件的当前位置• Seek filenumber, position :设置文件的当前位置,影响下一次的读 / 写操作
其它函数和语句
使用对象类访问文件•虽然以上列出的一系列语句或函数可以全面操
作驱动器、目录或文件,但它们很分散,难于记忆和使用。
• VB 提供了一个完整的对象模型,该模型中包含了与驱动器、目录和文件等元素完全对应的一组对象,利用各个对象的属性和方法可以方便地获取文件系统的信息、处理目录和文件、以及读写顺序文件。
• 这就是 File System Object ( FSO )对象模型
FSO 对象模型中主要的 5 个对象:• Drive 对象:读取驱动器信息• Folder 对象:管理文件夹,读取文件夹信息• Files 对象:管理文件,读取文件信息• TextStream 对象:主要用于读写文件• FileSystem Object 对象:提供对驱动器、文
件夹和文件的各种操作,核心对象。该对象建立在以上对象的基础之上,比如很多方法是复制了其它对象的方法,还提供方法创建生成以上对象。
File System Objects 对象模型
使用类库(非可视化对象)• FSO 对象不是一个可见的控件对象,不能
通过部件添加到工程中,需要引用类库( Class Library )
• 类库示对象类的集合,可以为开发者提供大量制作好的可以直接使用的对象
在工程中添加对象类引用–“工程”菜单中,选择“引用”命令– 选定类库名称左边的复选框–单击“确定”按钮
加载 FSO 对象模型• FSO 对象模型包含在一个称为 Scripting 的类型库中,此类型库位于 Scrrun.Dll 文件中。要使用该类型库,必须首先在工程中引用此文件,操作方法如下:
1. 执行【工程】→【引用】菜单命令,打开“引用”对话框;
2. 在对话框中的可引用类型库列表中选中“Microsoft Scripting Runtime”项并确定;
• 使用“对象浏览器”可以查看其对象、集合、属性、方法、事件以及它的常数,同时在声明变量时,输入 As 关键字后,该类型库中的对象类型会自动显示在数据类型提示列表中。
该对象是 FSO 对象模型中的核心对象, FSO编程的主要步骤:(1) 在“工程 | 引用”中选择“ Microsoft Scripting
runtime”
(2) 创建一个 FileSystemObject 对象(3) 通过读取新对象的属性值获取信息(4)调用 FileSystemObject 对象中的方法来创建一
个新的对象,如 Files 对象、 Drive 对象
FileSystemObject 对象
方法一:使用 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 语言中的指针,声明时并没有空间,也没有内容,是一个空值。只有创建后才能使用(等同于让指针指向一个有意义的空间)
【例】窗体加载后,输出系统各驱动器的容量和剩余可用空间。
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
访问驱动器
Drives 属性:是一个驱动器对象的集合,即 Drive 对象
的集合。Drive 对象的主要属性有:• AvailableSpace :驱动器上的可用空间• DriveLetter :驱动器号(只读)• DriveType :驱动器类型• FileSystem :文件系统的类型• FreeSpace :可用空间• VolumnName :卷标名• IsReady :是否准备好
FileSystemObject 对象的属性
(1) DriveExist 方法:返回真存在,否则不存在 oFSO.DriveExists(“d”)
(2) GetDrive 方法:返回一个指定的 Drive 对象 set oDrive = oFSO.GetDrive(“c:”)
(3) GetDriveName 方法:从指定的路径名中返回驱动器名,但不检查是否存在
oFSO.GetDriveName(“d:\vb6”)
使用 FileSystemObject 访问驱动器
• 文件夹本身的信息可以通过 Folder 对象来访问,部分文件夹的处理由 FileSystemObject 对象的方法来完成。
Folder 对象的主要属性: Attributes :设置或返回文件夹的属性。如只读、隐藏等 DateCreated :返回创建日期和时间,是只读属性 Drive :返回文件夹所在的驱动器符号,是只读属性 Files :返回文件夹下由所有 File 对象组成的 Files集合 IsRootFolder :指定的文件夹是否是根文件夹 Name :返回文件夹名,重新设置该属性意味着改名 ParentFolder/SubFolders :返回指定文件夹的父 /子文件夹对象 Path :返回指定文件夹的路径 Size :返回以字节为单位的包含在文件夹中所有文件和子文件夹
的大小
访问文件夹
(1) FolderExist 方法:返回真假值x = oFSO.FolderExist(“d:\vb6\samples”)
(2) GetFolder 方法:返回一个指定的 Folder 对象set oFoldert = oFSO.GetFolder(“d:\vb6\samples”)
当指定的文件夹不存在时,该方法会出错
FileSystemObject 对象访问文件夹( 一 )
【例】检查当前目录下是否存在文件夹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
访问文件夹示例
(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 对象访问文件夹( 二 )
(1) GetParentFolderName 方法:获取父文件夹 set oFolder = oFSO.GetParentFolderName(path)
(2) GetSpecialFolder 方法 set oFolder = oFSO.GetSpecialFolder(folderspec)
folderspec 取值:• WindowsFolder 0 Windows 操作系统文件夹• SystemFolder 1 系统文件夹• TemporaryFolder 2 系统临时文件夹
FileSystemObject 对象访问文件夹( 三 )
三种对象来支持文件的访问:• 文件本身的信息可以通过 File 对象来访问,
如文件的大小、创建日期、文件属性等,该对象还提供文件的复制、移动和删除等。
• 也可以通过 FileSystemObject 对象来执行文件的创建、复制、删除等操作。
• 文件的读写由 TextStream 对象来支持,但是该对象仅用于文本文件的操作。
访问文件
(1) FileExist 方法:返回真假(2) GetFile 方法:返回一个指定的 File 对象(3) GetFileName 方法:从指定路径名中返回
文件名(4) OpenTextFile 方法:打开一个文本文件,返回
一个 TextStream 对象
FileSystemObject 对象访问文件( 一 )
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 对象示例
• 先创建 TextStream 对象供读 Set oTS=oFSO.OpenTextFile(“a.txt",ForReading)
• Read :从一个文件中读取指定数量的字符strTemp = oTS.Read(10)
• ReadLine :读取一整行,不包括换行符strTemp = oTS.ReadLine
• ReadAll :读取一个文本文件的所有内容• Skip :跳过指定数量的字符
oTS.Skip(10)• SkipLine :跳过一行
使用 TextStream 对象读文件
• 先创建 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 对象写文件
(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 对象访问文件夹( 二 )