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也还有许多非常有用的方法,比如获取目录下的所有文件、判断目录下是否存在某个特定文件等。

     不再赘述。

 

转载于:https://www.cnblogs.com/zzstone/p/5530707.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值