存取文件的方法有很多种,可以使用上述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. PowerDesigner设置唯一约束/唯一索引/唯一键

    注意:还需要设置unique约束,也是在这个界面. 参考: https://blog.csdn.net/cnham/article/details/6676650 https://blog.csdn. ...

  2. IT程序猿们,我该做什么选择呢

    这个时刻,我想我遇到人生小拐点了,程序猿到了30岁,到达了一个分界线了,现在的我该何去何从呢? 先谈下简单的情况吧: 来这个公司2年了,之前因为身体的原因,不想那么累,于是选择了一份维护的工作,就来了 ...

  3. [转载] MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    转载的原文地址 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静态曲线,那 ...

  4. rocketmq技术架构图

    NameServer.Broker.Producer.Consumer之间如何进行通信,如何工作: NameServer和Broker: NameServer主要做两件事情,第一就是管理Broker, ...

  5. 关于WEB集群中文件服务器的讨论

    原文地址: http://blog.itpub.net/29806344/viewspace-1364778/ 在WEB集群中一般都要上传和删除图片.小规模的时候,图片放在本地,再通过同步方式来保持一 ...

  6. 转 UIActivityIndicatorView、UIProgressView 活动与进度指示器-IOS开发

    活动指示器(UIActivityIndicatorView)可以告知用户有一个操作正在进行中.进度指示器(UIProgressView )也具有同样功能,而且还可以告知用户离操作结束还多远. 这两个指 ...

  7. 修改后无警告全面支持non-ARC以及ARC的OpenUDID

    OpenUDID Open source initiative for a universal and persistent UDID solution for iOS. 首创的给iOS提供设备唯一标 ...

  8. java操作mongodb时,对象bean和DBObject相互转换的方法

    package com.iqbon.spider.util; import java.lang.reflect.Field; import java.lang.reflect.InvocationTa ...

  9. jaxb使用

    一.前言 JAXB——Java Architecture for XML Binding,是一项可以根据XML Schema产生Java类的技术.JAXB提供将XML实例文档反向生成Java对象树的方 ...

  10. 【BZOJ】【3668】【NOI2014】起床困难综合症

    贪心 位运算的题……基本都是按位来做的?... 从高位到低位,贪心来搞就可以了…… 这都算不上是数位DP吧= = /****************************************** ...