对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 =
  10. Do
  11. wfsm.WriteLine ("第" & n & "行:" & Now)
  12. n = n +
  13. Loop Until n =
  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
  4.  
  5. Set fe = fso.GetFile("d:\test.txt")
  6.  
  7. fe.OpenAsTextStream(ForWriting).WriteLine ("今天天气好晴朗")
  8. fe.OpenAsTextStream(ForAppending).WriteBlankLines ()
  9. fe.OpenAsTextStream(ForAppending).WriteLine ("处处好风光")
  10. Debug.Print fe.OpenAsTextStream(ForReading).ReadAll
  11.  
  12. End Sub

六、其他

使用File对象还可以做更多其他事情,比如获取文件名、文件的创建时间等。

FSO也还有许多非常有用的方法,比如获取目录下的所有文件、判断目录下是否存在某个特定文件等。

不再赘述。

VBA中的FileSystemObject对象(FSO)和文本流的更多相关文章

  1. VB 中定义FileSystemObject对象,要先添加对象

     存取文件的方法有很多种,可以使用上述VB提供的函数,使用Windows API函数等等,但是最简单的方法是使用FileSystemObject对象. 1.使用FileSystemObject对象 F ...

  2. Scripting.FileSystemObject对象的详细技巧指南

    Scripting.FileSystemObject对象的详细技巧指南 FileSystemObject对象提供对计算机文件系统的访问: powered by 25175.net 在代码内操作文本文件 ...

  3. js中的FileSystemObject使用(FSO)

    Set fso = Server.CreateObject("Scripting.FileSystemObject") 定义FSO对象 fso.CreateFolder(Serve ...

  4. 处理Selection对象和Range对象——Word VBA中重要的两个对象

    处理Selection对象和Range对象——Word VBA中重要的两个对象 Word 开发人员参考Selection 对象代表窗口或窗格中的当前所选内容.所选内容代表文档中选定(或突出显示)的区域 ...

  5. VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别

    在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见.比如最常用的:Worksheet.Range("A1:A10")  VB的语法,使用参数的不一定是方法,也有可能是属性 ...

  6. ASP入门(十四)-FileSystemObject 对象

    File Access 组件中常见的对象有 FileSystemObject.TextStream.File.Folder.Drive等,其中每一个对象都有不同的属性和方法,我们将会在用到的时候进行详 ...

  7. javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...

  8. 【JavaScript】JavaScript中的ActiveXObject对象

    JavaScript中ActiveXObject对象是启用并返回 Automation 对象的引用.    使用方法: newObj = new ActiveXObject( servername.t ...

  9. VBA中使用JavaScript脚本语言解析JSON数据

    JSON:JavaScript 对象表示法(JavaScript Object Notation) 和xml相似,都是文本形式(保存在文本文件中或字符串等形式),比如: jsstr = {" ...

随机推荐

  1. PHP生成二维码【谷歌API+qrcode+圆角Logo】

    方法一:谷歌二维码API 接口地址:https://chart.googleapis.com/chart 官方文档:https://developers.google.com/chart/infogr ...

  2. Hadoop之TaskInputOutputContext类

    在MapReduce过程中,每一个Job都会被分成若干个task,然后再进行处理.那么Hadoop是怎么将Job分成若干个task,并对其进行跟踪处理的呢?今天我们来看一个*Context类——Tas ...

  3. Attribute 与 Property 的区别

    网上的说法是: Property 是面向对象的概念,是Object的一部分. Attribute 是<input type="text"> type就是Attribut ...

  4. SQL删除重复数据方法

    例如: id           name         value 1               a                 pp 2               a           ...

  5. css分离思想

    CSS命名就应该最简单.最直接,直捣黄龙.没有HTML标签,没有层级,这些通通滚蛋,不要.为什么不要,有三大原因: 1. 限制重用 我们会使用层级(#test .test),会使用标签(ul.test ...

  6. Tomcat增加缓存

  7. 编译busybox-1.24.1 制作文件系统

    arm-linux-gcc  3.4.5 busybox-1.24.1.tar.bz21, 修改 Makefile找到以下2处修改为ARCH ?= armCROSS_COMPILE ?= arm-li ...

  8. laravel队列

    三种情况: queue:work 默认只执行一次队列请求, 当请求执行完成后就终止; queue:listen 监听队列请求, 只要运行着, 就能一直接受请求, 除非手动终止; queue:work ...

  9. 将helps.php或者functions.php直接进行了加载

    TP3系列中functions.php文件默认其实是空文件,很好找.我们可以直接封装代码. Laravel5系列中的path/vendor/laravel/framework/src/Illumina ...

  10. html 和 html5(一)(表格 | 列表 | 提交按钮 | 单选 |复选 | 框架 | 脚本 | html字符实体 )

    一.框架 使用iframe来显示目录链接页面 iframe可以显示一个目标链接的页面 目标链接的属性必须使用iframe的属性,如下实例: 实例 <iframe src="demo_i ...