官术网_书友最值得收藏!

1.4 使用ADODB.Stream實現文件讀寫

對于UTF-8編碼的含中文的文本文件,無論是以傳統方式,還是用FSO的TextStream對象打開,讀取到的內容會出現亂碼。

本書源文件“utf-8File.txt”文件中也是一首二十四節氣歌,但是該文件的編碼格式是UTF-8,如圖1-52所示。

圖1-52 UTF-8編碼的文本文件

使用前面講過的FSO方式讀取該文件,讀取到的是亂碼,如圖1-53所示。

圖1-53 不期望的讀取結果

下面講述一種能夠按照指定編碼打開文件的方式:ADODB.Stream對象。

1.4.1 對象的引入

ADODB是一個非常重要的對象,經常用于數據庫操作,在后面的章節會探討ADODB操作數據庫方面的知識,本節介紹一下ADODB.Stream讀寫文件。

前期綁定:工程中添加引用“Microsoft ActiveX Data Objects 2.8”,如圖1-54所示。

圖1-54 添加外部引用

代碼中聲明:Dim AStream As New ADODB.Stream,會看到自動成員提示,說明綁定成功,如圖1-55所示。

圖1-55 使用ADODB.Stream

后期綁定:在工程中不添加ADODB的前提下,使用CreateObject("ADODB.Stream")創建一個新的Stream對象。

1.4.2 讀取文本文件

ADODB.Stream對象通過LoadFromFile方法載入文本文件,然后用ReadText方法讀取所有內容。

如果ReadText后面不帶參數,則相當于FSO中的ReadAll,讀取全部內容,如果是ReadText i,則表示讀取i個字符。

但是在裝載文件之前,必須預設ADODB.Stream對象的若干屬性。

 Type屬性:讀寫文本文件用adTypeText(2),讀寫二進制文件用adTypeBinary(1)。

 Mode屬性:使用adModeReadWrite(3),可讀寫。

 CharSet屬性:指定文件編碼,要根據文本文件的編碼來設定。

以下過程讀取UTF-8格式的二十四節氣歌的前四個字符。

上述過程的打印結果是:“春雨驚春”。如果把ReadText(4)改成ReadText,則讀取出所有內容。

對應的后期綁定代碼如下所示。

需要注意的是,由于代碼中采用了后期綁定方式,并未在工程中添加ADODB引用,因此Type、Mode等屬性不能用枚舉常量,只能使用枚舉常量的等價值。

1.4.3 寫入文本文件

使用ADODB.Stream寫入文本文件的步驟是:創建對象→設定屬性→打開對象→寫入內容→保存到文件→關閉對象。

下面的代碼把一個字符串重復兩次寫入文本文件,并保存為UTF-8格式。

代碼分析:枚舉常量adSaveCreateOverWrite(2)表示如果目標文件已存在,則覆蓋保存。

運行上述過程,再次打開記事本文件,如圖1-56所示。

圖1-56 保存為UTF-8文件

1.4.4 利用ADODB.Stream下載網頁附件

除了文本文件以外,ADODB.Stream還可以讀寫二進制文件。在二進制文件代碼編寫方面,需要改動的地方主要有以下兩個。

 Type屬性:需要改為adTypeBinary。

 ReadText方法、WriteText方法分別更改為Read、Write。

下面講解ADODB.Stream對象聯合使用XMLHttp對象,實現網頁附件下載到本地的功能。

XMLHttp對象經常用于向HTTP服務器發送請求,其前期綁定方式是向工程中添加引用“Microsoft XML v6.0”,如圖1-57所示。

圖1-57 添加外部引用

后期創建對象的方法是:CreateObject("Microsoft.XMLHTTP")。

XMLHttp對url完成請求后,返回的ResponseBody是一個未解碼的二進制數據,因此,得到這個二進制數據后,用ADODB.Stream寫入計算機中的文件即可實現附件的下載。

下面的實例從WinRAR壓縮軟件的官方網站下載WinRAR 5.50的安裝文件。

代碼分析:Content()是一個字節數組,用于存儲XMLHttp返回的ResponseBody,然后用ADODB.Stream的Write方法,把Content保存為文件。

運行上述過程后,C:\temp\文件夾下多了一個Winrar550.exe文件。

以上內容的源代碼文件為“實例文檔05.xlsm”。

主站蜘蛛池模板: 晴隆县| 关岭| 奉节县| 栾城县| 香港| 商河县| 和林格尔县| 娄烦县| 冕宁县| 张家界市| 罗源县| 车致| 吴旗县| 汝南县| 延边| 琼海市| 互助| 云南省| 荥经县| 石狮市| 洛隆县| 无为县| 金塔县| 霸州市| 公主岭市| 永登县| 碌曲县| 京山县| 巴马| 阳原县| 五寨县| 东乌珠穆沁旗| 平凉市| 玛多县| 达孜县| 遂平县| 彰武县| 阿勒泰市| 岐山县| 林周县| 遂平县|