FileSystemObject、Folder 和 File 对象的一些方法都与通过 TextStream 对象创建、读取或写入文件有关。
虽然 TextStream 对象定义为 FileSystemObject 对象的一个独立的附属对象,但我们不得不使用 FileSystemObject 对象或其附属对象来创建一个 TextStream 对象并访问磁盘文件的内容。
有三个常用方法用于创建或打开一个文本文件并返回 TextStram 对象。
方法 | 说明 |
---|---|
CreateTextFile(filename,overwrite,unicode) | 在磁盘上用指定的文件名 filename 创建一个新文本文件,并返回一个与该文件对应的 TextStream 对象。如果可选的 overwrite 参数设置为True,将覆盖具有同样路径的同名文件。缺省的 overwrite 是 False。如果可选的 unicode 参数设置为 False,该文件的内容将存储为 Unicode 格式。缺省的 unicode 是 False |
OpenTextFile(filename,iomode,create,format) | 打开或创建(如果不存在)一个名为 filename 的文件,并且返回与该文件对应的 TextStream 对象。filename 参数可以包含绝对或相对路径。iomode 参数说明需要的访问类型。容许值是 ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。写入或追加到一个不存在的文件时,如果 create 参数设置为 True,将创建一个新文件。缺省的 create 是 False。format 参数说明了读或写文件时的数据格式。容许值是 TristateFalse(0)(缺省),说明用 ASCII 数据格式;TristateTrue(-1) 说明用 Unicode 数据格式;TristateUseDefault(-2) 说明数据使用系统缺省的格式 |
OpenAsTextStream(iomode,format) | 打开一个指定的文件并且返回一个 TextStream 对象,可用于对该文件的读、写或追加。iomode 参数说明了需要的访问类型。容许值是 ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。Format参数说明了读写文件的数据格式。容许值是 TristateFalse(0)(缺省),说明用 ASCII 数据格式;TristateTrue(-1) 说明用 Unicode 数据格式; TristateUseDefault(-2) 说明使用系统缺省的格式 |
上面列出的方法在 FileSystemObject、Folder 和 File 对象中的实现有所不同。
方法 | FileSystemObject 对象 | Folder 对象 | File 对象 |
---|---|---|---|
CreateTextFile | 有 | 有 | 有 |
OpenTextFile | 有 | 无 | 无 |
OpenAsTextStream | 无 | 无 | 有 |
因此,可以使用这些方法创建一个新的文本文件,或者打开一个已存在的文件。则可得到与该文件相应的一个 TextStream 对象,可以使用 TextStream 对象的属性和方法操作文件。
可以用 CreateTextFile 方法创建新的文本文件,或覆盖一个已存在的文件。返回的 TextStream 对象可用来读写文件。
首先创建一个 FileSystemObject 对象,用来创建 TextStream 对象。下面这个例子是用 VBScript 创建一个“普通的”(即非 Unicode)名为 MyFile.txt 的文件,并覆盖已存在的同名文件:
'In VBScript:
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTStream = objFSO.CreateTextFile("C:TextFilesMyFile.txt", True, False)
//In Jscript:
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
var objTStream = objFSO.CreateTextFile('C:TextFilesMyFile.txt', True, False);
OpenTextFile 方法用于打开一个已有的文本文件。它返回一个 TextStream 对象,可用这个对象对文件读或追加数据。
同样,首先创建一个 FileSystemObject 对象,然后用其创建一个 TextStream 对象。下面的 VBScript 程序例子打开一个名为 MyFile.txt 的文件,准备读出其内容:
'In VBScript:
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTStream = objFSO.OpenTextFile("C:TextFilesMyFile.txt", ForReading)
//In Jscript:
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
var objTStream = objFSO.OpenTextFile('C:TextFilesMyFile.txt', ForReading);
为了写入一个文件或创建一个不存在的文件,可以用以下代码:
'In VBScript:
Set objTStream = objFSO.OpenTextFile("C:TextFilesMyFile.txt", ForWriting, True)
//In Jscript:
var objTStream = objFSO.OpenTextFile('C:TextFilesMyFile.txt', ForWriting, True);
如果要打开一个已有的 Unicode 文件,准备对其追加数据,但是不创建不存在的文件,可以用:
'In VBScript:
Set objTStream = objFSO.OpenTextFile("C:TextFilesMyFile.txt", ForReading, False, TristateTrue)
//In Jscript:
var objTStream = objFSO.OpenTextFile('C:TextFilesMyFile.txt', ForReading, False, TristateTrue);
可用 File 对象的 OpenAsTextStream 方法打开与该对象相应的文件,并且返回一个能对该文件进行读、写和追加的 TextStream 对象。所以,给定一个 File 对象(这种情况下不是FileSystemObject对象)——objFileObject,可作为一个“普通的”(非 Unicode)TextStream 对象打开它,以供追加文件内容:
'In VBScript:
Set objTStream = objFileObject.OpenAsTextStream(ForAppending, False)
//In Jscript:
var objTStream = objFileObject.OpenTextFile(ForAppending, False);
注意,使用这种方法不需要文件名,因为程序的执行通过引用 File 对象进行,并且没有 create 参数,因为该文件必须已存在,如果想从一个新的空的文件开始,可以用:
'In VBScript:
Set objTStream = objFileObject.OpenAsTextStream(ForWriting)
//In Jscript:
var objTStream = objFileObject.OpenTextFile(ForWriting);
如果想读取该文件:
'In VBScript:
Set objTStream = objFileObject.OpenAsTextStream(ForReading)
//In Jscript:
var objTStream = objFileObject.OpenTextFile(ForReading);
表3和表4是 TextStream 对象的全部属性和方法的列表。下面将简短介绍各个重要的成员的细节。
TextStream 的属性提供有关文件内文件指针当前位置的信息,如表3所示。注意,所有的属性是只读的。
属性 | 说明 |
---|---|
AtEndOfLine | 如果文件位置指针在文件中一行的末尾则返回 True |
AtEndOfStream | 如果文件位置指针在文件的末尾则返回 True |
Column | 从 1 开始返回文件中当前字符的列号 |
Line | 从 1 开始返回文件中当前行的行号 |
AtEndOfLine 和 AtEndOfStream 属性仅对以 iomode 参数为 ForReading 的方式打开的文件可用,否则将会出错。
方法 | 说明 |
---|---|
Close() | 关闭一个打开的文件 |
Read(numchars) | 从文件中读出 numchars 个字符 |
ReadAll() | 作为单个字符串读出整个文件 |
ReadLine() | 作为一个字符串从文件中读出一行(直到回车符和换行) |
Skip(numchars) | 当从文件读出时忽略 numchars 个字符 |
SkipLine() | 当从文件读出时忽略下一行 |
Write(string) | 向文件写入字符串 string |
WriteLine(string) | 向文件写入字符串 string(可选)和换行符 |
WriteBlankLines(n) | 向文件写入 n 个换行符 |
一旦使用 CreateTextFile、OpenTextFile 或 OpenAsTextStream 方法以及 ForWriting 或 ForAppending 参数,创建一个对应于某个文件的 TextStream 对象,可以用下面的 VBScript 程序写文件和关闭文件:
'In VBScript:
objTStream.WriteLine "At last I can create files with VBScript!"
objTStream.WriteLine
objTStream.WriteLine "Here are three blank lines:"
objTStream.WriteBlankLines 3
objTStream.Write "... and this is "
objTStream.WriteLine "the last line."
objTStream.Close
//In Jscript:
objTStream.WriteLine('At last I can create files with JScript!');
objTStream.WriteLine();
objTStream.WriteLine('Here are three blank lines: ');
objTStream.WriteBlankLines(3);
objTStream.Write('... and this is ');
objTStream.WriteLine('the last line.');
objTStream.Close();
一旦使用 CreateTextFile、OpenTextFile 或 OpenAsTextStream 方法以及 ForReading 参数,创建一个对应于某个文件的 TextStream 对象,可以用下面的 VBScript 程序读文件和关闭文件:
'In VBScript:
'read one line at a time until the end of the file is reached
Do While Not objTStream.AtEndOfStream
'get the line number
intLineNum = objTStream.Line
'format it as a 4-character string with leading zeros
strLineNum = Right("000" & CStr(intLineNum), 4)
'get the text of the line from the file
strLineText = objTStream.ReadLine
Response.Write strLineNum & ": " & strLineText & "<BR>"
Loop
objTStream.Close
//In Jscript:
// read one line at a time until the end of the file is reached
while (! objTStream.AtEndOfStream) {
// get the line number
intLineNum = objTStream.Line;
// format and convert to a string
strLineNum = '000' + intLineNum.toString();
strLineNum = substr(strLineNum, strLineNum.length – 4, 4)
// get the text of the line from the file
strLineText = objTStream.ReadLine();
Response.Write(strLineNum + ': ' + strLineText + '<BR>');
}
objTStream.Close();