對FileSystemObject一直略有耳聞,VBA愛好者常常簡稱為FSO對象。
在Scripting類庫中有三個可以直接使用NEW關(guān)鍵字實例化的類,第一個就是常用的字典,第三個是FSO。
一、FSO對象引用的方法:
前期綁定:先要引用類庫文件scrrun.dll,寫代碼的時候有智能提示。如果程序發(fā)給別人用,就要用后期綁定方式。
Dim fso As New Scripting.FileSystemObject
后期綁定:不需要引用類庫文件,但沒有智能提示。
Set fso = CreateObject("Scripting.FileSystemObject")
二、使用FSO對象的CreatTextFile方法
可以使用該方法創(chuàng)建一個文本文件。第5行執(zhí)行后,文本文件已經(jīng)創(chuàng)建在硬盤中。
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]])。
參數(shù)1:要創(chuàng)建的文件的全路徑,字符串。
參數(shù)2:Bool值,如果相同路徑存在同名文件,是否覆蓋。
參數(shù)3:Bool值,用什么編碼寫入文件,默認(rèn)是ASCII(true),也可以是unicode
返回值是TextStream類型對象,也就是本文的另一個重點,文本流。
2、為方便使用文本流對象,我在第4行做了顯式的類型聲明wfsm。
3、使用wfsm的WriteLine方法,把字符串按行寫入文件。本例是把本機(jī)的時間寫入文件。
4、Colse方法關(guān)閉流。
三、使用OpenTextFile方法
這個方法的功能很多,可以讀、寫、追加寫入。如果目標(biāo)文件不存在還可以根據(jù)需求創(chuàng)建文件。
語法:object.OpenTextFile(filename[, iomode[, create[, format]]])
參數(shù)1:要創(chuàng)建的文件的全路徑,字符串。
參數(shù)2:常數(shù)。ForReading讀取、ForWriting寫入,ForAppending在文件末尾追加寫入
參數(shù)3:Bool值,如果文件不存在,是否創(chuàng)建。 默認(rèn)是False不創(chuàng)建。
參數(shù)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 '創(chuàng)建一個流用來寫入 8 Set wfsm = fso.OpenTextFile("d:\test.txt", ForAppending) 9 n = 110 Do11 wfsm.WriteLine ("第" & n & "行:" & Now)12 n = n + 113 Loop Until n = 1114 wfsm.Close15 16 '創(chuàng)建一個流用來讀取17 Set rfsm = fso.OpenTextFile("d:\test.txt", ForReading)18 Do19 str = rfsm.ReadLine20 Debug.Print str21 Loop Until rfsm.AtEndOfLine22 23 rfsm.Close24 25 End Sub
第8-13行,創(chuàng)建一個文本流追加寫入文件。第17-21行,把上面寫入的內(nèi)容讀出出來。AtEndofLine判斷是否到了末尾行號
四、文本流TextStream的一些方法和屬性
本文標(biāo)題雖然是FSO,但讀取和寫入文件實際使用的都是TextStream的對象
1、文本流TextStream類型不能用New創(chuàng)建實例。但可以像例子中使用FSO的某些方法創(chuàng)建,也可以使用File對象的某些方法創(chuàng)建(見后)。
a.不同的創(chuàng)建方式得到不同的流對象。
b.如果創(chuàng)建的是讀取的流,但使用了Write方法,在運行時就會報錯。
c.相同方式創(chuàng)建的同一文本文件的多個流不能共存。下面的代碼運行到第7行會報錯"權(quán)限的拒絕"。其它要注意的特性可自行測試
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.Close10 wfsm2.Close11 End Sub
2、文本流有幾個不同的讀取和寫入方法(如上所述要注意和流的類型相匹配,否則會在運行時報錯)。
讀?。篟ead,ReadAll,ReadLine
寫入:Write,WriteLine,WriteBlankLines
3、文本流還有一些實用的屬性。
AtEndOfLine: 文件指針正好在行尾標(biāo)記,則返回TRUE
AtEndOfStream: 文件指針在文件末尾,則返回TRUE
Line: 返回一個 TextStream 文件中的當(dāng)前行號。
Column: 返回 TextStream 文件中當(dāng)前字符位置的列號。
4、流在使用后不要忘了Close
五、使用File對象創(chuàng)建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 ("處處好風(fēng)光")11 Debug.Print fe.OpenAsTextStream(ForReading).ReadAll12 13 End Sub
六、其他
使用File對象還可以做更多其他事情,比如獲取文件名、文件的創(chuàng)建時間等。
FSO也還有許多非常有用的方法,比如獲取目錄下的所有文件、判斷目錄下是否存在某個特定文件等。
不再贅述。
聯(lián)系客服