VBS处理UTF-8文本之ADODB.stream


1、ADODB.stream对象

  • FilesystemObject的OpenTextFile 默认会用系统的编码读取文本,默认一般都是ANSI(通常我们称为ASCII字符)
  • FilesystemObject的OpenTextFile 只能读取Unicode和ANSI的编码的文件。
  • 对于UTF-8编码的文本文件FilesystemObject
  • 但是ADODB.stream可以读取utf-8和其它编码的文 件
  • ADODB.stream对象的文件路径C:\Program Files\Common Files\System\ado\msado15.dll

2、ADODB.stream对象的方法

2.1、open

  • 打开 Stream 对象来操作二进制或文本数据的流。

  • 语法:Stream.Open Source, Mode, OpenOptions, UserName, Password

  • 参数Source:

    • Source可选, Variant 值,指定 Stream 的数据源。
    • Source 可能包含绝对 URL 字符串,该字符串指向某个众所周知的树状结构(如电子邮件或文件系统)中现有的节点。
    • 应使用 URL关键字(“URL=http://server/folder”)来指定 URL。
    • 另外,Source 也可包含对已打开的 Record 对象的引用,该对象打开与 Record 相关联的默认流。
    • 如果未指定 Source,Stream 将被实例化并被打开,默认情况下它不与基本源相关联。
  • 参数Mode:

    • 可选。
    • ConnectModeEnum 值,指定得出的 Stream 的访问模式(例如,读/写或只读)。
    • 默认值为 adModeUnknown。
    • 有关访问模式的详细信息,请参阅 Mode 属性。如果未指定 Mode,它将被源对象继承。
    • 例如,如果以只读模式打开源 Record,那么默认情况下 Stream 也将以只读模式打开。
      参数列表:
      adModeRead =1
      adModeReadWrite =3
      adModeRecursive =4194304
      adModeShareDenyNone =16
      adModeShareDenyRead =4
      adModeShareDenyWrite =8
      adModeShareExclusive =12
      adModeUnknown =0
      adModeWrite =2
  • 参数OpenOptions:

    • 可选。
    • StreamOpenOptionsEnum 值。默认值为 adOpenStreamUnspecified。
      adOpenStreamAsync =1
      adOpenStreamFromRecord =4
      adOpenStreamUnspecified=-1
  • 参数UserName:

    • 可选。String 值,包含(在需要时)访问 Stream 对象的用户标识。
  • 参数Password:

    • 可选。String 值,包含(在需要时)访问 Stream 对象的密码。
  • 说明

    • 当把 Record 对象作为源参数传递时,将不使用 UserID 和 Password 参数,因为这样就已经可以访问 Record 对象。与之类似,Record 对象的 Mode 也被传递给 Stream 对象。
  • 如果未指定 Source,打开的 Stream 将不包含数据,并且其 Size 为零 (0)。

  • 当 Stream 关闭时,要避免丢失任何写入此 Stream 的数据,请用 CopyTo 或 SaveToFile 方法保存 Stream,或将其保存到另一个内存位置。

  • Stream 未打开时,有可能读取 Stream 的所有只读属性。

  • 如果异步打开 Stream,所有后续的操作(除了检查 State 和其他只读属性)都将被阻塞,直到 Open 操作完成为止。

2.2、close

关闭打开的对象和任何相关的对象。

2.3、Write 方法

  • 将二进制数据写入 Stream 对象。
  • 语法:Stream.Write Buffer
  • 参数
    Buffer Variant,包含要写入的字节数组。

2.4、WriteText 方法

  • 将指定的文本字符串写入 Stream 对象。

  • 语法:Stream.WriteText Data, Options

  • 参数

    • Data String 值,包含要写入的字符文本。
    • Options 可选。
    • StreamWriteEnum 值,指定是否在指定字符串的结尾写入分行符字符。
      adWriteChar =0
      adWriteLine =1

2.5、Read 方法

  • 从二进制 Stream 对象读取指定的字节数。
  • 语法:Variant = Stream.Read ( NumBytes )
  • 参数
    • NumBytes 可选。Long 值,指定要从文件或 StreamReadEnum 值 adReadAll(默认值)读取的字节数。
  • 返回值
    • Read 方法从 Stream 对象读取指定的字节数或整个流,并以 Variant 形式返回所得到的数据。
  • 说明
    如果 NumBytes 超过 Stream 中剩余的字节数,将只返回剩余的字节。数据读取没有被填充到与 NumBytes 指定的长度一致。
    如果没有剩余的字节可读取,将返回一个值为 Null 的变体。Read 不能用于向后读取。
    注意 NumBytes 始终度量字节。对于文本Stream 对象,请使用 ReadText。

2.6、ReadText 方法

  • 从文本 Stream 对象读取指定数目的字符。
  • 语法
    String = Stream.ReadText ( NumChars )
  • 参数
    NumChars 可选。Long 值,指定要从文件读取的字符数,或 StreamReadEnum 值。默认值为 adReadAll。
  • 返回值
    ReadText 方法从 Stream 对象中读取指定数目的字符、整个行或整个流,并返回所得到的字符串。
  • 说明
    如果 NumChar 超过流中剩余的字符数,将只返回剩余的字符。
    读取的字符串没有被填充到与 NumChar 指定的长度一致。
    如果没有剩余的字符可读取,将返回一个值为 Null 的变体。
    ReadText 不能用于向后读取。
    ReadText 方法与文本流(Type 为 adTypeText)一起使用。对于二进制流,请使用 Read。

2.7、Flush 方法

将保留在 ADO 缓冲区中的 Stream 的内容强加到与 Stream 相关联的基本对象。

  • 语法
    Stream.Flush
  • 说明
    此方法可用于将流缓冲区的内容发送到 URL(Stream 对象源)表示的基本对象。
    要确保对 Stream 内容所做的所有更改都被写入,应调用此方法。
    但是使用 ADO 时一般不必调用 Flush,因为 ADO 尽可能在后台不断刷新其缓冲区。
    Stream 内容的更改将自动进行,在调用 Flush 前不会被缓存。
    用 Close 方法关闭 Stream 将自动刷新 Stream 的内容,而无需在 Close 之前显式地调用 Flush。

2.8、CopyTo 方法

将 Stream 中指定数目的字符或字节(取决于 Type)复制到另一个 Stream 对象。

  • 语法
    Stream.CopyTo DestStream, NumChars
  • 参数
    • DestStream 对象变量值,包含打开的 Stream 对象的引用。将当前 Stream 复制到由 DestStream 指定的目标 Stream。目标 Stream 必须已打开。否则,将发生运行时错误。
      注意 DestStream 参数可能不会成为 Stream 对象的代理,因为这将需要访问 Stream 对象上无法与客户远程连接的专用接口。
    • NumChars 可选。Integer 值,指定要从源 Stream 中的当前位置复制到目标 Stream 的字节或字符数目。默认值为 –1,它指定将所有字符或字节从当前位置复制到 EOS。
  • 说明
    此方法从 Position 属性指定的当前位置开始,复制指定数目的字符或字节。如果指定的数目超过可用的数目(即超过 EOS),那么只复制当前位置到 EOS 之间的字符或字节。如果省略 NumChars 值或其值为 –1,将复制从当前位置开始的所有字符或字节。
    如果在目标流中存在现有字符或字节,超过复制结束位置的所有内容将保留,不会被截断。Position 成为紧跟在复制的最后一个字节后面的字节。如果要截断这些字节,请调用 SetEOS。
    应使用 CopyTo 将数据复制到与源 Stream 同类型的目标 Stream(两者的 Type 属性设置都是 adTypeText,或者都是 adTypeBinary)。对于文本 Stream 对象,可以更改目标 Stream 的 Charset 属性设置以进行字符集间的转换。还可以将文本Stream 对象成功地复制到二进制 Stream 对象中,但却不能将二进制 Stream 对象复制到文本 Stream 对象中。

2.9、SkipLine 方法

读取文本流时跳过一整行。

  • 语法
    Stream.SkipLine
  • 说明
    到(包括)下一个分行符之间的所有字符都被跳过。默认情况下,LineSeparator 为 adCRLF。如果试图跳过超出 EOS 的位置,那么当前位置将保持在 EOS 处。
    SkipLine方法与文本流(Type 为 adTypeText)一起使用。

2.10、LineSeparator 属性

指示要在文本Stream 对象中用作分行符的二进制字符。

  • 设置和返回值
    设置或返回 LineSeparatorsEnum 值,指示用在 Stream 中的分行符。默认值为 adCRLF。
  • 说明
    读取文本 Stream 的内容时,LineSeparator 用于解释行。可以用SkipLine方法跳过行。
    LineSeparator 只能与文本 Stream 对象(Type 为 adTypeText)一起使用。如果 Type 为 adTypeBinary,则忽略此属性

2.11、EOS 属性

指示当前位置是否在流的结尾处。

  • 返回值
    返回 Boolean 值,指示当前位置是否在流的结尾处。如果流中没有其他字节,则 EOS 返回 True;如果当前位置后还有其他字节,则返回 False。
    若要设置流的结尾位置,请使用 SetEOS 方法。若要确定当前位置,请使用 Position 属性。

2.12、SetEOS 方法

设置流的结尾位置。

  • 语法
    Stream.SetEOS
  • 说明
    SetEOS 通过使当前 Position 成为流的结尾来更新 EOS 属性的值。当前位置后面的所有字节或字符都将被截断。
    由于 Write、WriteText 和 CopyTo 不截断现有 Stream 对象中多余的值,因此可以通过用 SetEOS 设置新的流结尾位置来截断这些字节或字符。
    警告 如果将 EOS 设置到流的实际结尾前面的位置,那么新的 EOS 位置后面的所有数据都将丢失。

2.13、SaveToFile 方法

把 Stream 的二进制内容保存到文件。

  • 语法
    Stream.SaveToFile FileName, SaveOptions
  • 参数
    • FileName String 值,包含要保存 Stream 内容的文件的完整名称。可以保存到任何有效的本地位置,或任何可以通过 UNC 值访问的位置。
    • SaveOptions SaveOptionsEnum 值,指定当文件不存在时 SaveToFile 是否创建新文件。默认值为 adSaveCreateNotExists。如果指定的文件不存在,可以用这些选项来指定产生错误。还可以指定 SaveToFile 覆盖现有文件的当前内容。
      adSaveCreateNotExist =1
      adSaveCreateOverWrite = 2 [1]
  • 注意 如果覆盖现有的文件(设置 adSaveCreateOverwrite),SaveToFile 将截断原始文件中超出新 EOS 的所有字节。
  • 说明
    SaveToFile 可用于将 Stream 对象的内容复制到本地文件。Stream 对象的内容或属性不发生变化。调用 SaveToFile 之前,Stream 对象必须被打开。
    此方法不更改 Stream 对象与其基本源的关联。Stream 对象将仍与原来的 URL 关联,该 URL 在 Stream 对象打开时就是其源。
    完成 SaveToFile 操作后,流中的当前位置 (Position) 被设置到流的开始处 (0)。

2.14、LoadFromFile 方法

将现有文件的内容加载到 Stream 中。

  • 语法
    Stream.LoadFromFile FileName
  • 参数
    • FileName String 值,包含要加载到 Stream 中的文件的名称。FileName 可以包含任何 UNC 格式的有效路径和名称。如果指定的文件不存在,将发生运行时错误。
  • 说明
    此方法可用于将本地文件的内容加载到 Stream 对象中。还可用于将本地文件的内容上载至服务器。
    调用 LoadFromFile 之前 Stream 对象必须是打开的。此方法不改变 Stream 对象的绑定;它将仍旧绑定到原来打开 Stream 的 URL 所指定的对象。LoadFromFile 用从该文件中读取的数据覆盖 Stream 对象的当前内容。
    Stream 中任何现有的字节都被该文件的内容覆盖。LoadFromFile 创建的 EOS 后跟随的任何原有和剩余的字节都将被截去。
    在调用 LoadFromFile 后,当前位置将设置在 Stream 的开始处(Position 为 0)。

2.15、Charset 属性

指示用于转换文本 Stream 内容的字符集。

  • 设置和返回值
    设置或返回 String 值,该值指定用于转换 String 内容的字符集。默认值为“Unicode”。所允许的值是作为 Internet字符集字符串(例如,“iso-8859-1”,“Windows-1252”等)被传递到接口的典型字符串。有关系统支持的字符集字符串的列表,请参阅 Windows 注册表中 HKEY_CLASSES_ROOT\MIME\Database\Charset 的子键。
  • 说明
    在文本 Stream 对象中,文本对象存储为 Unicode。Charset 属性将用指定的字符集转换从 Stream 读取的数据。与之类似,以指定字符集写入 Stream 的数据被转换为 Unicode 以便存储在 Stream 对象中。
    对于打开的 Stream,其当前 Position 须位于 Stream (0) 的开始处,这样才能设置 Charset。
    Charset 只能与文本 Stream 对象(Type 为 adTypeText)一起使用。如果 Type 为 adTypeBinary,则忽略此属性。

2.16、Size 属性 (ADO Stream)

指示流的字节数。

  • 返回值
    返回 Long 值,指定流的字节数。默认值为流的大小,如果不知道流的大小,则该值为 -1。
  • 说明
    Size 只能与打开的 Stream 对象配合使用。
    注意 Stream 对象中可以存储任意多个位,它仅受系统资源限制。如果 Stream 包含的位数超过 Long 值所能表示的位数,Size 将被截断因而不能精确表示 Stream 的长度。

2.17、Position 属性

指示在 Stream 对象中的当前位置。

  • 设置和返回值
    设置或返回 Long 值,指定流开始处到当前位置的偏移字节数。默认值为 0,表示流中的第一个字节。
  • 说明
    可将当前位置移动到流的结尾处后面的一点。如果在流结尾处以外的地方指定当前位置,Stream 对象的 Size 也将随之增加。所有以这种方式添加的新字节都将为 Null。
    注意 Position 始终度量字节。对于使用多字节字符集的文本流,请将位置与字符大小相乘以确定字符数。例如,对于双字节字符集,第一个字符位置为 0,第二个字符位置为 2,第三个字符位置为 4,依此类推。
    不能用负值更改 Stream 中的当前位置。只有正数才能用于 Position。
    对于只读 Stream 对象,如果设置的 Position 值超过 Stream 的 Size,ADO 将不返回错误。这不会更改 Stream 的大小,也不会以任何方式改变 Stream 的内容。但是,应避免这种操作,因为它可能产生无意义 Position 值。

2.18、Type 属性 (ADO Stream)

指示 Stream 中包含的数据的类型(二进制或文本)。

  • 设置和返回值
    设置或返回 StreamTypeEnum 值,用于指定包含在 Stream 对象中的数据类型。默认值为 adTypeText。但如果二进制数据最初被写入新的空 Stream 中,Type 将被更改为 adTypeBinary。
    adTypeBinary =1
    adTypeText =2
  • 说明
    只有在当前位置位于 Stream 的开始处(Position 为 0)时,Type 属性才为读/写;位于其他位置时均为只读。

2.19、State 属性

对所有适用的对象,指示该对象状态是打开的还是关闭的。
指示对所有可应用的对象执行异步方法,指示对象的当前状态是正在连接、正在执行还是正在检索。

  • 返回值
    返回可能是 ObjectStateEnum 值的 Long 值。默认值为 adStateClosed。
  • 说明
    可以随时用 State 属性确定给定对象的当前状态。
    对象的 State 属性可以是值的组合。例如,如果正在执行某个语句,此属性将有一个 adStateOpen 和 adStateExecuting 的组合值。
    State 属性为只读。

2.20、Mode 属性

指示在 Connection、Record 或 Stream 对象中修改数据的有效权限。

  • 设置和返回值
    设置或返回 ConnectModeEnum 值。对于 Connection,默认值为 adModeUnknown。对于 Record 对象,默认值为 adModeRead。对于与基本源相关联的 Stream(用 URL 将其作为源打开或者作为 Record 的默认 Stream 打开),默认值为 adReadOnly。对于与基本源不关联的 Stream(在内存中实例化),默认值为 adModeUnknown。
  • 说明
    使用 Mode 属性设置或返回当前连接上提供者使用的访问权限。只有当 Connection 对象关闭时,才能设置 Mode 属性。
    对于 Stream 对象,如果未指定访问模式,它将从用于打开 Stream 对象的源继承。例如,如果 Stream 是从 Record 对象打开的,默认情况下它将以打开 Record 对象相同的模式打开。
    此属性在对象关闭时为读/写,在对象打开时为只读。
    远程数据服务用法 当在客户端的 Connection 对象上使用时,Mode 属性只能设置为 adModeUnknown。

猜你喜欢

转载自blog.csdn.net/chuhe163/article/details/103549144