(三)处理驱动器
可以利用Drive对象来获取有关各种驱动器的信息,Drive对象的属性有:
TotalSize 属性 驱动器的总容量,以字节为单位。
AvailableSpace 属性 驱动器的可用空间容量,以字节为单位。
FreeSpace 属性 驱动器的剩余空间容量,和 AvailableSpace 属性是相同的。
对于支持限额的计算机系统来说,二者之间可能有所不同。
DriveLetter 属性 驱动器字母,即盘符。
DriveType 属性 驱动器的类型。如"Removable"、"Fixed"、"Network"、"CD-ROM"、"RAM Disk"
SerialNumber 属性 驱动器的序列号。
FileSystem 属性 驱动器所使用的文件系统类型。如FAT、FAT32、NTFS、以及 CDFS。
IsReady 属性 驱动器是否可用。
ShareName 属性 驱动器的网络共享名。
VolumeName 属性 驱动器的卷标名。
Path 属性 驱动器的路径。C 驱动器的路径是 C:,而不是 C:/。
RootFolder 属性 定驱动器的根文件夹。C 驱动器的根文件夹是 C:/。
这些属性的使用都十分简单,直接用“对象.属性”就可以了。在使用前要先用GetDrive获得一个Drive对象,注意不能创建一个驱动器对象。下面举个例子:
Sub ShowFreeSpace(drvPath)
Dim fs, d, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.Getdrive(fs.GetDriveName(drvPath))
s = "Drive " & UCase(drvPath) & "-"
s = s & d.VolumeName & vbCrLf
s = s & "Free Space: " & FormatNumber(d.FreeSpace / 1024, 0)
s = s & " Kbytes"
MsgBox s
End Sub
利用Call ShowFreeSpace("c:"),即可获得C盘的卷标名和可用空间。
(四)处理文件夹
1、获取文件夹的信息
可以利用Folder对象来获取有关文件夹的信息,Folder对象的属性有:
Attributes 属性 文件夹的属性。可为下列值中的任意一个或任意的逻辑组合:
Normal 0 一般文件。未设置属性。
ReadOnly 1 只读文件。属性为读/写。
Hidden 2 隐藏文件。属性为读/写。
System 4 系统文件。属性为读/写。
Volume 8 磁盘驱动器卷标。属性为只读。
Directory 16 文件夹或目录。属性为只读。
Archive 32 自上次备份后已经改变的文件。属性为读/写。
Alias 64 链接或快捷方式。属性为只读。
Compressed 128 压缩文件。属性为只读。
Name 属性 文件夹名字。
ShortName 属性 较早的 8.3 命名约定的程序所使用的短名字。
Type 属性 文件夹类型。
Files 属性 所有 File 对象组成的 Files 集合,这些 File 对象包含在指定的文件夹中
──包括设置了隐藏和系统文件属性的那些文件。
Drive 属性 文件夹所在的驱动器符号。
IsRootFolder 属性 文件夹是否是根文件夹。
ParentFolder 属性 文件夹的父文件夹对象。
SubFolders 属性 文件夹的子文件夹集合。
Path 属性 文件夹的路径。
ShortPath 属性 较早的 8.3 文件命名约定的程序所使用的短路径。
Size 属性 文件夹的大小,以字节为单位。
DateCreated 属性 文件夹的创建日期和时间。
DateLastModified 属性 最后一次修改文件夹的日期和时间。
DateLastAccessed 属性 最后一次访问文件夹的日期和时间。
属性的使用和Drive对象是一样的,可以用GetFolder获取一个Folder对象,也可以用FileSystemObject对象的CreateFolder 方法创建一个Folder对象。
2、Folder对象的方法
⑴Copy 方法
语法:object.Copy destination[, overwrite]
作用:把一个指定的文件夹从一个地方复制到另一个地方。
说明:Copy 方法的作用与FileSystemObject对象的CopyFolder 方法是一样的,不同在于后者可一次复制多个文件夹。
⑵Move 方法
语法:object.Move destination
作用:将一个指定的文件夹从一个地方移动到另一个地方。
说明:Move 方法的作用与FileSystemObject.MoveFolder 是一样的。不同在于后者可一次移动多个文件夹。
⑶Delete 方法
语法:object.Delete force
作用:删除一个指定的文件夹。
说明:Delete 方法的作用与FileSystemObject.DeleteFolder 是一样的。
⑷CreateTextFile 方法
语法:object.CreateTextFile(filename[, overwrite[, unicode]])
作用:与FileSystemObject对象的CreateTextFile 方法是一样的。
示例:
Set fd = fs.getfolder("c:/tmp")
Set f = fd.CreateTextFile("testfile.txt", True)
可在C盘tmp文件夹下创建testfile.txt文件。
(五)处理文件
1、获取文件的信息
可以利用File对象来获取有关文件的信息,File对象的属性和Folder的属性是完全一样的,只是少了Files 属性、IsRootFolder 属性、SubFolders 属性这3个属性。这里就不列了。
2、File对象的方法
⑴Copy 方法
⑵Move 方法
⑶Delete 方法
以上三种方法与Folder的是完全类似的,语法也一样,同样也可用FileSystemObject对象相应的方法代替。
⑷OpenAsTextStream 方法
语法:object.OpenAsTextStream([iomode, [format]])
作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用来对文件进行读、写、追加操作。
说明:此方法与FileSystemObject对象的 OpenTextFile 方法相同的功能。参数也是一致的。
(六)处理文本文件
1、打开或创建文本文件
打开现有的文本文件,可以使用FileSystemObject对象的 OpenTextFile 方法或File对象的OpenAsTextStream 方法。
创建文件可以使用FileSystemObject对象的 CreatTextFile 方法或在OpenTextFile 方法中将iomode参数设为ForWriting=2,create参数设为True。
例如:
Set f = fso.OpenTextFile("c:/test1.xls", 2, True) '如果不存在test1.xls将自动创建。
2、读取文件
打开文件后,将返回一个TextStream 对象,我们可以利用TextStream 对象的属性及方法来对文件进行读写操作。
先看TextStream 对象的几个属性。
·AtEndOfLine 属性 文件指针是否正好在行尾标记的前面
·AtEndOfStream 属性 文件指针是否在 TextStream 文件末尾
·Column 属性 TextStream 文件中当前字符位置的列号
·Line 属性 TextStream 文件中的当前行号
利用TextStream 对象读取文件有三种方法。
·Read 方法
语法:object.Read(characters)
功能:从一个 TextStream 文件中读取指定数量的字符并返回得到的字符串。
示例:
Sub du()
Dim fso, a, retstring
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.OpenTextFile("c:/testfile.txt", ForReading, False)
Do While a.AtEndOfLine <> True '是否到行末
retstring = retstring & a.Read(1) '读取一个字符
Loop
a.Close
Debug.Print retstring '可看到读取了第一行的字符
End Sub
·ReadLine 方法
语法:object.ReadLine
功能:从一个 TextStream 文件读取一整行(到换行符但不包括换行符)并返回得到的字符串。
示例:
Sub du_line()
Dim fso, a, retstring
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.OpenTextFile("c:/testfile.txt", ForReading, False)
Do While a.AtEndOfStream <> True '是否在 TextStream 文件末尾
retstring = a.ReadLine '读取一行
Debug.Print retstring '显示在立即窗口
Loop
a.Close
End Sub
·ReadAll 方法
语法:object.ReadAll
功能:读取整个的 TextStream 文件并返回得到的字符串。
说明:对于大的文件,使用ReadAll方法浪费内存资源。应使用其它的技术去输入一个文件,比如按行读取文件。
示例:
Sub du_all()
Dim fso, a, retstring
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.OpenTextFile("c:/testfile.txt", ForReading, False)
retstring = a.Readall '全部读取
Debug.Print retstring
a.Close
End Sub
还有两个辅助读取的方法:
·Skip 方法
语法:object.Skip(characters)
功能:当读一个 TextStream 文件时跳过指定数量的字符。
示例:
Sub duskip()
Dim fso, a, retstring
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.OpenTextFile("c:/testfile.txt", ForReading, False)
Do While a.AtEndOfLine <> True '是否到行末
retstring = retstring & a.Read(1) '读取一个字符
a.Skip (1) '跳过一个字符
Loop
a.Close
Debug.Print retstring '可看到读取了第一行的奇数位的字符
End Sub
·SkipLine 方法
语法:object.SkipLine
功能:当读一个 TextStream 文件时跳过下一行。
3、写入数据到文件
写入数据到文件也有三种方法。
·Write 方法
语法:object.Write(string)
功能:写一个指定的字符串到一个 TextStream 文件。
示例:
Sub xie()
Const ForWriting = 2, ForAppending = 8
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("c:/testfile.txt", ForAppending,TristateFalse)
f.Write "Hello world!" '写入字符串
f.Close
End Sub
·WriteLine 方法
语法:object.WriteLine([string])
功能:写入一个指定的字符串和换行符到一个 TextStream 文件中。
示例:
f.WriteLine("Hello world!") '写入字符串,加一个换行符。
·WriteBlankLines 方法
语法:object.WriteBlankLines(lines)
功能:写入指定数量的换行符到一个 TextStream 文件中。
示例:
f.WriteBlankLines(3) '相当于按3次回车。
4、关闭文件
利用TextStream 对象的Close方法,上面的示例中已经有了,很简单。
(七)总结
从上面的介绍,我们看到使用FileSystemObject对象处理文件、文件夹比使用VBA语句的方法具有更容易存在的特点。这是因为FileSystemObject对象使用了面向对象的语法。另外FileSystemObject对象处理文本文件毫不逊色于VBA语句,非常值得推荐。唯一的问题是不能处理二进制文件,微软在有关文档中称计划将来支持二进制文件,不过应该只是计划而已,呵呵。