Scripting.TextStream 对象

Back to Documentation Index

FileSystemObject、Folder 和 File 对象的一些方法都与通过 TextStream 对象创建、读取或写入文件有关。

虽然 TextStream 对象定义为 FileSystemObject 对象的一个独立的附属对象,但我们不得不使用 FileSystemObject 对象或其附属对象来创建一个 TextStream 对象并访问磁盘文件的内容。

创建 TextStream 对象的方法

有三个常用方法用于创建或打开一个文本文件并返回 TextStram 对象。

表1 创建 TextStream 对象的方法及说明
方法 说明
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 对象中的实现有所不同。

表2 三个对象中包含的方法
方法 FileSystemObject 对象 Folder 对象 File 对象
CreateTextFile
OpenTextFile
OpenAsTextStream

因此,可以使用这些方法创建一个新的文本文件,或者打开一个已存在的文件。则可得到与该文件相应的一个 TextStream 对象,可以使用 TextStream 对象的属性和方法操作文件。

  1. 创建新的文本文件

    可以用 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);
  2. 打开已存在的文本文件

    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);
  3. 作为一个 TextStream 对象打开一个 File 对象

    可用 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);

TextStream 对象成员概要

表3和表4是 TextStream 对象的全部属性和方法的列表。下面将简短介绍各个重要的成员的细节。

  1. TextStream 对象的属性

    TextStream 的属性提供有关文件内文件指针当前位置的信息,如表3所示。注意,所有的属性是只读的。

    表3 TextStream 对象的属性及说明
    属性 说明
    AtEndOfLine 如果文件位置指针在文件中一行的末尾则返回 True
    AtEndOfStream 如果文件位置指针在文件的末尾则返回 True
    Column 从 1 开始返回文件中当前字符的列号
    Line 从 1 开始返回文件中当前行的行号

    AtEndOfLine 和 AtEndOfStream 属性仅对以 iomode 参数为 ForReading 的方式打开的文件可用,否则将会出错。

  2. TextStream 对象的方法
    表4 FileSystemObject 对象的方法和说明
    方法 说明
    Close() 关闭一个打开的文件
    Read(numchars) 从文件中读出 numchars 个字符
    ReadAll() 作为单个字符串读出整个文件
    ReadLine() 作为一个字符串从文件中读出一行(直到回车符和换行)
    Skip(numchars) 当从文件读出时忽略 numchars 个字符
    SkipLine() 当从文件读出时忽略下一行
    Write(string) 向文件写入字符串 string
    WriteLine(string) 向文件写入字符串 string(可选)和换行符
    WriteBlankLines(n) 向文件写入 n 个换行符
  3. 写文本文件

    一旦使用 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();
  4. 读文本文件

    一旦使用 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();