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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章