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

1、使用FileSystemObject对象

FileSystemObject对象并非VB内置的对象,必须引用“Microsoft Scripting Runtime”对象模块,VB程序才可以使用FileSystemObject。

选取VB菜单的“工程/引用”命令:

引用了“Microsoft Scripting Runtime”对象模块后,如果使用“对象浏览器”窗口,可以看到在“Scripting”模块中新增的Dictionary、Drive、Drives、File、Files、FileSystemObject、Folder、Folders、TextStream等对象。见下图:

其中FileSystemObject是这些对象的关键,要使用其他对象,先必须建立FileSystemObject对象。

FileSystemObject对象及其子对象

建立FileSystemObject对象的方法如下:
    Dim 对象变量名 fs As New FileSystemObject

1、Folder对象与文件夹的浏览
    使用Folder对象可以获得文件夹的信息,例如:
    Dim fs As New FileSystemObject '建立FileSystemObject对象
    Dim fd As Folder '定义Folder对象
    Set fd = fs.GetFolder("c:\") '建立c:\文件夹所对应的Folder对象

2、Files集合对象和File对象
    Folderduix d  File属性是一个集合对象,所代表的是该文件夹中所有的File对象的集合。
    Dim f As File '定义File对象
    For Each f In fd.Files '此时f等于被列举的File对象

下面的代码能在ListBox中显示c:\中的所有文件。
    Private Sub Command1_Click()
    Dim fs As New FileSystemObject
    Dim fd As Folder
    Dim f As File '定义File对象
    Set fd = fs.GetFolder("c:\")
    For Each f In fd.Files '每次进入循环,f代表一个文件
    List1.AddItem f.Name '显示每个文件后将其名称加入到ListBox之中
    Next
    End Sub

3、SubFolder集合对象
    除了File属性之外,SubFolder属性也是附属于Folder对象的集合对象,而它所代表的是该文件夹所有Folder对象的集合。

下面的代码能在ListBox中显示c:\中的所有文件夹
    Dim fs As New FileSystemObject
    Dim fd As Folder
    Dim sfd As Folder
    Set fd = fs.GetFolder("d:\")
    For Each sfd In fd.SubFolders '每次进入循环,sfd代表一个文件夹
    List1.AddItem sfd.Name '显示每个文件夹后将其名称加入到ListBox之中
    Next

Folder对象和File对象属性应用

依靠Folder的File对象属性可以完成一些实用的程序。

1、如何知道某个文件夹所占用的磁盘空间
    Dim fs As New FileSystemObject
    Dim fd As Folder
    Set fd = fs.GetFolder("C:\")
    Debug.Print fd.Size

2、如何显示文件夹的所有子文件夹和子子文件夹
    使用VB的“递归调用”(Recursive Call)。所谓递归调用,是指子程序(或函数)在运行时调用自己,例如:

Sub Sub X()
      ……
      SubX  '调用自己
      ……
    End Sub

先写好一个可以显示所有子文件夹(但不含子子文件夹)的子程序ListFolder
   然后使用“递归调用”,完成显示C盘的所有文件。

Private Sub Command1_Click()
    Dim fs As New FileSystemObject ' 建立 FileSystemObject
    Dim fd As Folder ' 定义 Folder 对象
    Dim sfd As Folder
    Set fd = fs.GetFolder("c:\")
    ListFolder fd
    End Sub

Sub ListFolder(fd As Folder)
    Dim sfd As Folder
    For Each sfd In fd.SubFolders
    Debug.Print sfd.Path
    List1.AddItem sfd.Path
    ListFolder sfd ' 以 sfd 为参数,递归调用
    Next
    End Sub

下列是显示符合条件的文件的实例:

程序运行界面:

代码如下:

Private Sub Command1_Click()
Dim fs As New FileSystemObject
Dim fd As Folder, f As File
Dim attr As Long

' 组合文件属性值
attr = IIf(chkReadOnly.Value = 1, ReadOnly, 0)
attr = attr + IIf(chkArchive.Value = 1, Archive, 0)
attr = attr + IIf(chkHidden.Value = 1, Hidden, 0)
attr = attr + IIf(chkSystem.Value = 1, System, 0)

List1.Clear
Set fd = fs.GetFolder("c:\")
For Each f In fd.Files
    If (f.Attributes And attr) = attr Then
       List1.AddItem f.Name
    End If
Next
End Sub

VB 中定义FileSystemObject对象,要先添加对象的更多相关文章

  1. JavaScript中定义类的方式详解

    本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的exte ...

  2. ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象

    程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...

  3. C++——内存对象 禁止产生堆对象 禁止产生栈对象

    用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题都是不易发觉的,比如内 ...

  4. VBA中的FileSystemObject对象(FSO)和文本流

    对FileSystemObject一直略有耳闻,VBA爱好者常常简称为FSO对象. 在Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO. 一.FS ...

  5. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  6. VB中的Dictionary对象

    VB中的Dictionary对象 Dictionary对象不是VBA或Visual Basic实时语言的具体存在的部分,它是存在于Microsoft Scripting Runtime Library ...

  7. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  8. Django学习路21_views函数中定义字典及html中使用类实例对象的属性及方法

    创建 app6 在项目的 settings 中进行注册 INSTALLED_APPS 里面添加 'app6.apps.App6Config' 在 app6 的models.py 中创建数据表 clas ...

  9. js高级程序设计书中,有一句话在全局作用域中定义的函数实际上只 能被某个对象调用???

    js没有块级作用域(题外话:函数可以作为一个块级),所以我们经常使用闭包来模拟块级作用域,以避免变量或者函数因为名称相同而产生的冲突. 重点来了: 所以,如果我们把哪个变量或者函数放在全局作用域中,那 ...

随机推荐

  1. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  2. Node.js学习笔记(2) - Node.js安装及入门hello world

    今天来简单的记录一下Node.js的安装配置以及简单的入门 一.Node.js的安装 1.windows下的安装 windows下的安装很简单,只需要去官网http://nodejs.org中,找到w ...

  3. Tasker to answer incoming call by pressing power button

    nowadays, the smartphone is getting bigger in size, eg. samsung galaxy note and note 2, sorta big in ...

  4. thread_indent

    http://blog.csdn.net/justlinux2010/article/details/10269033

  5. 数据库中间件OneProxy and onemysql

    http://blog.itpub.net/28944233/cid-176181-list-1/ http://www.onexsoft.com/ 官网 http://pan.baidu.com/s ...

  6. MVC批量更新,使用jQuery Template

    在"MVC批量更新,可验证并解决集合元素不连续控制器接收不完全的问题"中,当点击"添加"按钮的时候,通过部分视图,在界面上添加新行.本篇体验使用jQuery T ...

  7. .net上开发winform

    c++用WinForm做界面的实现 因为笔者是以前是做C#的,对Winform情有独钟,最近想转C++,想把以前的一些Delphi转成c++,MFC我不熟而且用起来相当烦效果又丑,GTK图形库用起来太 ...

  8. python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码

    前言 urllib.parse 里面三个方法:urlencode,quote,unquote详解. 在做接口自动化过程中,http协议在发送url的时候,是以urlencode的编码格式传过去的,通常 ...

  9. windows tomcat nginx session(当一台tomcat关闭后)

    在windows下作nginx负载均衡测试. nginx的配置文件如下: worker_processes  1; events { worker_connections  1024; } http ...

  10. POP的Stroke动画

    POP的Stroke动画 效果 源码 https://github.com/YouXianMing/Animations // // PopStrokeController.m // Animatio ...