VBA中的FileSystemObject對象(FSO)和文本流


對FileSystemObject一直略有耳聞,VBA愛好者常常簡稱為FSO對象。

在Scripting類庫中有三個可以直接使用NEW關鍵字實例化的類,第一個就是常用的字典,第三個是FSO。

一、FSO對象引用的方法:

 前期綁定:先要引用類庫文件scrrun.dll,寫代碼的時候有智能提示。如果程序發給別人用,就要用后期綁定方式。

 Dim fso As New Scripting.FileSystemObject 

 后期綁定:不需要引用類庫文件,但沒有智能提示。

 Set fso = CreateObject("Scripting.FileSystemObject") 

二、使用FSO對象的CreatTextFile方法

      可以使用該方法創建一個文本文件。第5行執行后,文本文件已經創建在硬盤中。

 1 Sub CreateAndWrite()
 2 
 3 Dim fso As New Scripting.FileSystemObject
 4 Dim wfsm As Scripting.TextStream
 5 Set wfsm = fso.CreateTextFile("d:\test.txt", True)
 6 wfsm.WriteLine (Now)
 7 
 8 wfsm.Close
 9 
10 End Sub

1、CreatTextFile語法:object.CreateTextFile(filename[, overwrite[, unicode]])。

                                       參數1:要創建的文件的全路徑,字符串。

                                       參數2:Bool值,如果相同路徑存在同名文件,是否覆蓋。

                                       參數3:Bool值,用什么編碼寫入文件,默認是ASCII(true),也可以是unicode

     返回值是TextStream類型對象,也就是本文的另一個重點,文本流

2、為方便使用文本流對象,我在第4行做了顯式的類型聲明wfsm。

3、使用wfsm的WriteLine方法,把字符串按行寫入文件。本例是把本機的時間寫入文件。

4、Colse方法關閉流。

三、使用OpenTextFile方法

這個方法的功能很多,可以讀、寫、追加寫入。如果目標文件不存在還可以根據需求創建文件。

語法:object.OpenTextFile(filename[, iomode[, create[, format]]])

                                  參數1:要創建的文件的全路徑,字符串。

                                          參數2:常數。ForReading讀取、ForWriting寫入,ForAppending在文件末尾追加寫入

                                          參數3:Bool值,如果文件不存在,是否創建。 默認是False不創建。

                                  參數4:以什么編碼形式打開文件

 1 Sub OpenTextAndWriteRead()
 2 Dim fso As New Scripting.FileSystemObject
 3 Dim rfsm As Scripting.TextStream
 4 Dim wfsm As Scripting.TextStream
 5 Dim str As String
 6 
 7 '創建一個流用來寫入
 8 Set wfsm = fso.OpenTextFile("d:\test.txt", ForAppending)
 9     n = 1
10     Do
11          wfsm.WriteLine ("" & n & "行:" & Now)
12          n = n + 1
13     Loop Until n = 11
14 wfsm.Close
15 
16 '創建一個流用來讀取
17 Set rfsm = fso.OpenTextFile("d:\test.txt", ForReading)
18     Do
19         str = rfsm.ReadLine
20         Debug.Print str
21     Loop Until rfsm.AtEndOfLine
22     
23 rfsm.Close
24 
25 End Sub

第8-13行,創建一個文本流追加寫入文件。第17-21行,把上面寫入的內容讀出出來。AtEndofLine判斷是否到了末尾行號

四、文本流TextStream的一些方法和屬性

    本文標題雖然是FSO,但讀取和寫入文件實際使用的都是TextStream的對象

1、文本流TextStream類型不能用New創建實例。但可以像例子中使用FSO的某些方法創建,也可以使用File對象的某些方法創建(見后)。

    a.不同的創建方式得到不同的流對象。

    b.如果創建的是讀取的流,但使用了Write方法,在運行時就會報錯。

    c.相同方式創建的同一文本文件的多個流不能共存。下面的代碼運行到第7行會報錯"權限的拒絕"。其它要注意的特性可自行測試

 1 Sub Test()
 2 Dim fso As New Scripting.FileSystemObject
 3 Dim wfsm1 As Scripting.TextStream
 4 Dim wfsm2 As Scripting.TextStream
 5 
 6 Set wfsm1 = fso.OpenTextFile("d:\test.txt", ForAppending)
 7 Set wfsm2 = fso.OpenTextFile("d:\test.txt", ForAppending)
 8    
 9 wfsm1.Close
10 wfsm2.Close
11 End Sub

 2、文本流有幾個不同的讀取和寫入方法(如上所述要注意和流的類型相匹配,否則會在運行時報錯)。    

     讀取:Read,ReadAll,ReadLine
     寫入:Write,WriteLine,WriteBlankLines

3、文本流還有一些實用的屬性。

    AtEndOfLine:        文件指針正好在行尾標記,則返回TRUE
    AtEndOfStream:   文件指針在文件末尾,則返回TRUE
    Line:                   返回一個 TextStream 文件中的當前行號。
    Column:                返回 TextStream 文件中當前字符位置的列號。

4、流在使用后不要忘了Close

五、使用File對象創建TextStream

     行號3定義File類型,行號6使用Fso的GetFile方法得到File對象。WriteBlankLines(2)寫入2行空行。

 1 Sub FileAndTextStream()
 2     Dim fso As New Scripting.FileSystemObject
 3     Dim fe As Scripting.file
 5 
 6     Set fe = fso.GetFile("d:\test.txt")
 7    
 8     fe.OpenAsTextStream(ForWriting).WriteLine ("今天天氣好晴朗")
 9     fe.OpenAsTextStream(ForAppending).WriteBlankLines (2)
10     fe.OpenAsTextStream(ForAppending).WriteLine ("處處好風光")
11     Debug.Print fe.OpenAsTextStream(ForReading).ReadAll
12     
13 End Sub

六、其他

     使用File對象還可以做更多其他事情,比如獲取文件名、文件的創建時間等。

     FSO也還有許多非常有用的方法,比如獲取目錄下的所有文件、判斷目錄下是否存在某個特定文件等。

     不再贅述。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM