通过使用新的面向对象的 FSO 对象,诸如 Copy、 Delete、 Move 以及 OpenAsTextStream,或者使用传统的函数,诸如 Open、 Close、 FileCopy、 GetAttr 等等,您可以使用 Visual Basic 中的文件。请注意,不用考虑其文件类型就可以移动、复制或删除文件。
关于传统函数的用法的详细信息,请参阅本章的“用传统的文件 I/O 语句和函数处理文件”部分。本节的余下部分将描述如何使用新的 FSO 对象、方法和属性来使用文件。
文件操作主要有两类:
有三种不同方法来创建一个顺序文本文件(有时被称为“文本流”)。一种方法就是使用 CreateTextFile 方法。要创建一个空文本文件,可以:
Dim fso As New FileSystemObject, fil As File
Set fil = fso.CreateTextFile("c:\testfile.txt", True)
注意 FSO 对象模型尚不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,请使用带 Random 或 Binary 标志的 Open 命令。关于如何操作随机文件和二进制文件的详细信息,请参阅本章的“使用随机文件访问”和“使用二进制文件访问”部分。
另一种方法是使用 FileSystemObject 对象的 OpenTextFile 方法,该对象的 ForWriting 标志设置为:
Dim fso As New FileSystemObject, ts As New TextStream
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting)
或者使用带 ForWriting 标志设置的 OpenAsTextStream 方法:
Dim fso As New FileSystemObject, fil As File, ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("test1.txt")
Set fil = fso.GetFile("test1.txt")
Set ts = fil.OpenAsTextStream(ForWriting)
文本文件一经创建,就可以分三步向其中加入数据:
要打开文件,可以使用下面两种方法中的任一种: File 对象的 OpenAsTextStream 方法,或 FileSystemObject 对象的 OpenTextFile 方法。
要向打开的文本文件中写入数据,可以使用 TextStream 对象的 Write 或 WriteLine 方法。它们之间的唯一差别是 WriteLine 在指定的字符串末尾添加换行符。
如果想要向文本文件中添加一个空行,请使用 WriteBlankLines 方法。
要关闭一个已打开的文件,请使用 TextStream 对象的 Close 方法。
下面这个例子示范了如何打开一个文件,使用上述三种写入方法向该文件中添加数据,然后关闭文件:
Sub Create_File() Dim fso, txtfile Set fso = CreateObject("Scripting.FileSystemObject") Set txtfile = fso.CreateTextFile("c:\testfile.txt", True) txtfile.Write ("
这是一个测试例子。") '
写入一行。'
写入一行带有换行符的文本。txtfile.WriteLine("Testing 1, 2, 3.")
'
向文件中写入三个换行符。txtfile.WriteBlankLines(3)
txtfile.Close
End Sub
要从一个文本文件中读取数据,请使用 TextStream 对象的 Read、 ReadLine 或 ReadAll 方法:
任务 | 方法 |
从一个文件中读取指定数量的字符 | Read |
读取一整行(紧跟,但不包括,换行符) | ReadLine |
读取一个文本文件的所有内容 | ReadAll |
如果使用 Read 或 ReadLine 方法并且想要跳过数据的某些部分,可以使用 Skip 或 SkipLine 方法。
这些读取方法产生的文本被存储在一个字符串中,而这个字符串可以在一个控件中显示,也可以被字符串操作符分解(诸如 Left、 Right 和 Mid)、合并等等。
注意 vbNewLine 常数包含一个或多个字符(取决于操作系统)使得光标移至下一行的开头(回车/换行)。请注意,有的字符串末尾可能有这样的非打印字符。
Sub Read_Files() Dim fso As New FileSystemObject, txtfile, _ fil1 As File, ts As TextStream Set txtfile = fso.CreateTextFile("c:\testfile.txt", True) MsgBox "
正在写入文件"
'
写入一行。Set fil1 = fso.GetFile("c:\testfile.txt")
Set ts = fil1.OpenAsTextStream(ForWriting)
ts.Write "Hello World"
ts.Close
'
读取文件的内容。Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
对文件的移动、复制和删除,FSO 对象模型都提供了两种方法:
任务 | 方法 |
移动一个文件 | File.Move 或 FileSystemObject.MoveFile |
复制一个文件 | File.Copy 或 FileSystemObject.CopyFile |
删除一个文件 | File.Delete 或 FileSystemObject.DeleteFile |
本例先在C盘的根目录下创建了一个文本文件,并向其中写入一些信息,然后将该文件移至一个名叫 \tmp 的目录,并复制到一个叫 \temp 的目录下,最后删掉该文件在这两个子目录下的拷贝。
要运行本例,请先确认在C盘的根目录下已经存在名叫 \tmp 和 \temp 的目录。
Sub Manip_Files() Dim fso as New FileSystemObject, txtfile, fil1, fil2 Set txtfile = fso.CreateTextFile("c:\testfile.txt", True) MsgBox "
写入文件"
'
写入一行。txtfile.Write ("
这是一个测试例子。")
'
关闭要写入的文件。txtfile.Close
MsgBox "
移动文件到c:\tmp"
'
获得C
盘根目录下的一个文件句柄。Set fil1 = fso.GetFile("c:\testfile.txt")
'
将该文件移至\tmp
目录下。fil1.Move ("c:\tmp\testfile.txt")
MsgBox "
复制文件到c:\temp"
'
将该文件复制到\temp
目录下。fil1.Copy ("c:\temp\testfile.txt")
MsgBox "
删除文件"
'
获得这些文件当前位置的句柄。Set fil1 = fso.GetFile("c:\tmp\testfile.txt")
Set fil2 = fso.GetFile("c:\temp\testfile.txt")
'
删除这些文件。fil1.Delete
fil2.Delete
MsgBox "
全部完成!"