VB 中定义FileSystemObject对象,要先添加对象
存取文件的方法有很多种,可以使用上述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对象,要先添加对象的更多相关文章
- JavaScript中定义类的方式详解
本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的exte ...
- ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象
程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...
- C++——内存对象 禁止产生堆对象 禁止产生栈对象
用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题都是不易发觉的,比如内 ...
- VBA中的FileSystemObject对象(FSO)和文本流
对FileSystemObject一直略有耳闻,VBA爱好者常常简称为FSO对象. 在Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO. 一.FS ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- VB中的Dictionary对象
VB中的Dictionary对象 Dictionary对象不是VBA或Visual Basic实时语言的具体存在的部分,它是存在于Microsoft Scripting Runtime Library ...
- JavaScript学习12 JS中定义对象的几种方式【转】
avaScript学习12 JS中定义对象的几种方式 转自: http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...
- Django学习路21_views函数中定义字典及html中使用类实例对象的属性及方法
创建 app6 在项目的 settings 中进行注册 INSTALLED_APPS 里面添加 'app6.apps.App6Config' 在 app6 的models.py 中创建数据表 clas ...
- js高级程序设计书中,有一句话在全局作用域中定义的函数实际上只 能被某个对象调用???
js没有块级作用域(题外话:函数可以作为一个块级),所以我们经常使用闭包来模拟块级作用域,以避免变量或者函数因为名称相同而产生的冲突. 重点来了: 所以,如果我们把哪个变量或者函数放在全局作用域中,那 ...
随机推荐
- ARM ® and Thumb ®-2 指令系统
指令表关键词 Rm {, <opsh>} 寄存器移位方式,将寄存器的移位结果作为操作数而Rm值保持不变 <Operand2> 灵活的使用第二个操作数. ...
- 浏览器数据库IndexedDB介绍
摘要 在移动端H5页面开发的时候,为了更好的提高用户体验,可以对不常变化的数据做浏览器端数据缓存,在用户打开页面的时候,首先加载本地的数据,然后异步请求服务端,更新数据.在移动端webview中,可以 ...
- Qt on Android: Android SDK安装
之前我在 <Windows下Qt 5.2 for Android开发入门>一文中介绍了 Windows 下 Qt on Android 开发环境的搭建,略过了 Android SDK 的安 ...
- [runtime] iOS-Runtime-Headers
Dynamically Generated iOS Headers https://github.com/nst/iOS-Runtime-Headers Here are iOS Objective- ...
- DTree的改进与使用经验
1.dtree.js源码 function Node(id, pid, name, url, title, target, icon, iconOpen, open) { this.id = id; ...
- java类与继承的执行顺序
1.子类 public class TestClassLife extends TestClassLifeSuper { public TestClassLife() { System.out.pri ...
- Git 学习(七)标签管理
Git 学习(七)标签管理 发布版本时,通常会先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.取出某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. ...
- mac下zsh的使用:主题、z命令
安装Oh-My-ZSH: `curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh` zs ...
- hdu1226 超级密码 (BFS,里面用了大数取余原理)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进 ...
- go语言基础之结构体普通变量初始化
1.结构体 1.1.结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然单独定义以上变量比较繁琐,数据不便于管理. 结构体是一种聚合的数 ...