VB6中FSO具体应用详解

news2024/12/24 8:44:22

文前申明:原文为通用版实例代码,本菜鸟在每例之后加入一个简单的实例(均验证通过),供有需要的朋友参考.

您正在看的VB教程是:VB入门基础认识VB的文件系统对象FSO 

VB 编程中经常需要和文件系统打交道,比如获取硬盘的剩余空间、判断文件夹或文件是否存在等。在VB 推出文件系统对象(File System Object)以前,完成这些功能需要调用 Windows API 函数或者使用一些比较复杂的过程来实现,使编程复杂、可靠性差又容易出错。使用 Windows 提供的的文件系统对象,一切变得简单多了。以下笔者举出一些编程中比较常用的例子,以函数或过程的形式提供给大家,读者可在编程中直接使用,也可以改进后实现更为强大的功能。

  要应用 FSO 对象,须要引用一个名为 Scripting 的类型库,方法是,执行 VB6.0 的菜单项工程/引用,添加引用列表框中的“Microsoft Scripting Runtime”一项。然后我们在对象浏览器中就可以看到 Scripting 类型库下的众多对象及其方法、属性。

如果未添加此引用,运行时会出现以下错误:

1.判断光驱的盘符


  Function GetCDROM()      返回光驱的盘符(字母)
  Dim Fso As New FileSystemObject       '创建 FSO 对象的一个实例
  Dim FsoDrive As Drive, FsoDrives As Drives   '定义驱动器、驱动器集合对象
  Set FsoDrives = Fso.Drives
  For Each FsoDrive In FsoDrives          '遍历所有可用的驱动器
  If FsoDrive.DriveType = CDRom Then       '如果驱动器的类型为 CDrom
  GetCDROM = FsoDrive.DriveLetter   '输出其盘符
  Else
  GetCDROM = ""
  End If
  Next
  Set Fso = Nothing
  Set FsoDrive = Nothing
  Set FsoDrives = Nothing
  End Function

个人改写实例:用以上代码验证电脑硬盘的盘符类型

首先建立窗体, 在设计模式把formautoredraw设置为true

Sub Form_Load()

'首先在设计模式把formautoredraw设置为true

 Dim Fso As New FileSystemObject          '创建 FSO 对象的一个实例

  Dim FsoDrive As Drive, FsoDrives As Drives '定义驱动器、驱动器集合对象

  Set FsoDrives = Fso.Drives

  For Each FsoDrive In FsoDrives       '遍历所有可用的驱动器

 

  If FsoDrive.DriveType = CDRom Then       '如果驱动器的类型为 CDrom

  GetCDROM = FsoDrive.DriveLetter   '输出其盘符

  Print "CDRom 驱动器是:"

  Print GetCDROM

  ElseIf FsoDrive.DriveType = Fixed Then

  getfixed = FsoDrive.DriveLetter

  Print "固定驱动器是:"

  Print getfixed

 

  ElseIf FsoDrive.DriveType = Remote Then

  getremote = FsoDrive.DriveLetter

  Print "网络驱动器是:"

  Print getremote

 

  ElseIf FsoDrive.DriveType = unknown Then

  getunknown = FsoDrive.DriveLetter

  Print "未知驱动器是:"

  Print getunknow

 

  ElseIf FsoDrive.DriveType = RamDisk Then

  getramdisk = FsoDrive.DriveLetter

  Print "RAM磁盘是:"

  Print getramdisk

   End If

  

  Next

  Set Fso = Nothing

  Set FsoDrive = Nothing

  Set FsoDrives = Nothing

End Sub

2.判断文件、文件夹是否存在:


  '返回布尔值:True 存在,False 不存在,filername 文件名


  Function FileExist(filename As String)
  Dim Fso As New FileSystemObject
  If Fso.FileExists(filename) = True Then
  FileExist = True
  Else
  FileExist = False
  End If
  Set Fso = Nothing

End Function

'返回布尔值:True 存在,False 不存在,foldername 文件夹
  Function FolderExist(foldername As String)
  Dim Fso As New FileSystemObject
  If Fso.FolderExists(foldername) = True Then
  FolderExist = True
  Else
  FolderExist = False
  End If
  Set Fso = Nothing
  End Function

个人改进实例:验证文件是否存在

首先在form中建立一个文本框和一个按钮.文本框的multiline属性改为true

运行时在文本框中输入文件名,格式为D:\*.jpg,可以用通配符,或者固定文件名

然后单击按钮来验证文件是否存在

Sub Command1_Click()

Dim fs As New FileSystemObject

filename = Text1.Text

If fs.FileExists(filename) Then

Text1.Text = "存在"

Else

Text1.Text = "不存在"

End If

End Sub

Private Sub Form_Load()

Command1.Caption = "验证"

End Sub

3、获取驱动器参数:

返回磁盘总空间大小(单位:M),Drive = 盘符 A ,C, D ...
  Function AllSpace(Drive As String)
  Dim Fso As New FileSystemObject, Drv As Drive
 Set Drv = Fso.GetDrive(Drive) '得到 Drv 对象的实例
  If Drv.IsReady Then '如果该驱动器存在(软驱或光驱里有盘片,硬盘存取正常)
  AllSpace = Format(Drv.TotalSize / (2 ^ 20), "0.00") '将字节转换为兆
  Else
  AllSpace = 0
  End If
  Set Fso = Nothing
  Set Drv = Nothing
  End Function
  '返回磁盘可用空间大小(单位:M),Drive = 盘符 A ,C, D ...
  Function FreeSpace(drive)
  Dim Fso As New FileSystemObject, drv As drive
  Set drv = Fso.GetDrive(drive)
  If drv.IsReady Then
  FreeSpace = Format(drv.FreeSpace / (2 ^ 20), "0.00")
  End If
  Set Fso = Nothing
  Set Drv = Nothing
  End Function
 


  '获取驱动器文件系统类型,Drive = 盘符 A ,C, D ...
  Function FsType(Drive As String)
  Dim Fso As New FileSystemObject, Drv As Drive
  Set Drv = Fso.GetDrive(Drive)
  If Drv.IsReady Then
  FsType = Drv.FileSystem
  Else
  FsType = ""
  End If
  Set Fso = Nothing
  Set Drv = Nothing
  End Function

个人改进实例:验证c盘空间和文件类型

在窗体中画一个文本框和一个按钮,文本框的multiline属性改为true

Sub Command1_Click()

 Dim fso As New FileSystemObject, drv As Drive

 

 Set drv = fso.GetDrive(fso.GetDriveName("c:"))      '得到 Drv 对象的实例

  If drv.IsReady Then             '如果该驱动器存在(软驱或光驱里有盘片,硬盘存取正常)

 

  AllSpace = Format(drv.TotalSize / (2 ^ 20), "0.00") '将字节转换为兆

  free = Format(drv.FreeSpace / (2 ^ 20), "0.00")

  sys = drv.FileSystem

  Else

  AllSpace = 0

  End If

  Set fso = Nothing

  Set drv = Nothing

Text1.Text = "C盘空间为" & AllSpace & "MB" & vbCrLf & "c盘空闲空间为" & free & "MB"

Text1.Text = Text1.Text & vbCrLf & "c盘的文件系统为" & sys

End Sub

4,获取系统文件夹路径:


  '返回 Windows 文件夹路径
  Function GetWindir()
  Dim Fso As New FileSystemObject
  GetWindir = Fso.GetSpecialFolder(WindowsFolder)
  Set Fso = Nothing
  End Function
  '返回 Windows\System 文件夹路径
  Function GetWinSysdir()
  Dim Fso As New FileSystemObject
  GetWinSysdir = Fso.GetSpecialFolder(SystemFolder)
  Set Fso = Nothing
  End Function

个人改进实例:获取系统文件夹

同上,在窗体中画文本框和按钮,运行后点按钮来验证,别忘了把文本框的multiline属性改为true

Private Sub Command1_Click()

Dim fso As New FileSystemObject

 getwin = fso.GetSpecialFolder(windowfolder)

 getsys = fso.GetSpecialFolder(SystemFolder)

 Text1.Text = "windows文件夹为:" & getwin & vbCrLf & "system文件夹为:" & getsys

End Sub

5,综合运用:一个文件备份通用过程:
 

'Filename = 文件名,Drive = 驱动器,Folder = 文件夹(一层)


  Sub BackupFile(Filename As String, Drive As String, Folder As String)
  Dim Fso As New FileSystemObject '创建 FSO 对象实例
  Dim Dest_path As String, Counter As Long
  Counter = 0


  Do While Counter < 6 '如果驱动器没准备好,继续检测。共检测 6 秒
  Counter = Counter + 1
  Call Waitfor(1) '间隔 1 秒
Then
  Exit Do
  End If
  Loop


  If Fso.Drives(Drive).IsReady = False Then '6 秒后目标盘仍未准备就绪,退出
  MsgBox " 目标驱动器 " & Drive & " 没有准备好! ", vbCritical
  Exit Sub
  End If
  If Fso.GetDrive(Drive).FreeSpace < Fso.GetFile(Filename).Size Then
  MsgBox "目标驱动器空间太小!", vbCritical '目标驱动器空间不够,退出
  Exit Sub
  End If
  If Right(Drive, 1) <> ":" Then
  Drive = Drive & ":"
  End If
  If Left(Folder, 1) <> "\" Then
  Folder = "\" & Folder
  End If
  If Right(Folder, 1) <> "\" Then
  Folder = Folder & "\"
  End If
  Dest_path = Drive & Folder
  If Not Fso.FolderExists(Dest_path) Then '如果目标文件夹不存在,创建之
  Fso.CreateFolder Dest_path
  End If
  Fso.CopyFile Filename, Dest_path & Fso.GetFileName(Filename), True
  '拷贝,直接覆盖同名文件
  MsgBox " 文件备份完毕。", vbOKOnly
  Set Fso = Nothing
  End Sub
  Private Sub Waitfor(Delay As Single) '延时过程,Delay 单位约为 1 秒
  Dim StartTime As Single
  StartTime = Timer
  Do Until (Timer - StartTime) > Delay
  Loop
  End Sub

个人改进实例一:(复杂)

首先建立窗体,在窗体下输入以下代码:

 Private Sub Waitfor(Delay As Single) '延时过程,Delay 单位约为 1 秒

  Dim StartTime As Single

  StartTime = Timer

  Do Until (Timer - StartTime) > Delay

  Loop

  End Sub

Private Sub Form_Load()

 Dim Fso As New FileSystemObject '创建 FSO 对象实例

  Dim Dest_path As String, Counter As Long

  Counter = 0

  Do While Counter < 6 '如果驱动器没准备好,继续检测。共检测 6 秒

  Counter = Counter + 1

  Call Waitfor(1) '间隔 1 秒

  Exit Do

  Loop

  If Fso.Drives("d:").IsReady = False Then '6 秒后目标盘仍未准备就绪,退出

  MsgBox " 目标驱动器 " & "d:" & " 没有准备好! ", vbCritical

  Exit Sub

  End If

 

    Dim sofile

  sofile = InputBox("请输入要复制的文件名(如C:\temp.doc)")

 

  If Fso.GetDrive("d:").FreeSpace < Fso.GetFile(sofile).Size Then

  MsgBox "目标驱动器空间太小!", vbCritical '目标驱动器空间不够,退出

  Exit Sub

  End If

 

 

  Drive = InputBox("请输入目的驱动器盘符(如D):")

  If Right(Drive, 1) <> ":" Then

  Drive = Drive & ":"

  End If

 

 

  Depath = InputBox("请输入目标文件夹(如temp):")

  If Left(Depath, 1) <> "\" Then

  Folder = "\" & Depath

  End If

  If Right(Depath, 1) <> "\" Then

  Folder = Depath & "\"

  End If

 

  Dest_path = Drive & Folder

  MsgBox "目标文件为" & Dest_path

 

  If Not Fso.FolderExists(Dest_path) Then '如果目标文件夹不存在,创建之

  Fso.CreateFolder (Dest_path)

  End If

 

 

  Fso.CopyFile sofile, Dest_path, True

  '拷贝,直接覆盖同名文件

  MsgBox " 文件备份完毕。", vbOKOnly

  Set Fso = Nothing

End Sub

个人改进实例二:(精简)

先建立窗体,在窗体下输入以下代码:

Private Sub Form_Load()

 Dim Fso As New FileSystemObject '创建 FSO 对象实例

  Dim Depath As String

  Dim sofile

  sofile = InputBox("请输入要复制的文件名(如C:\temp.doc)")

  MsgBox "要复制的文件名为" & sofile

 

 

  Depath = InputBox("请输入目的文件夹(如D:\temp\):")

  MsgBox "目标文件夹为" & Depath

 

  If Not Fso.FolderExists(Depath) Then '如果目标文件夹不存在,创建之

  Fso.CreateFolder (Depath)

  End If

 

 

  Fso.CopyFile sofile, Depath, True

  '拷贝,直接覆盖同名文件

  MsgBox " 文件备份完毕。", vbOKOnly

  Set Fso = Nothing

End Sub

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JDK 11】【JDK 8】项目 jdk 版本升级,修改方案与实践

前言 工作中&#xff0c;难免会遇到升级版本的事情。这次由于两个系统中&#xff0c;系统 A 是用的 JDK8 版本&#xff0c;系统 B 是用 JDK11 版本&#xff1b;要求同步 JDK 版本&#xff0c;也就是升级到11版本。那么接下来将进行介绍~ 问题与解决 1. .sh 脚本启动无法启动…

状态模式——对象状态及其转换

1、简介 1.1、概述 在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c;这些状态在某些情况下能够相互转换&#xff0c;而且对象在不同的状态下也将具有不同的行为。为了更好地对这些具有多种状态的对象进行设计&#xff0c;可以使用一种被称为状态模式的设…

SAS-数据集SQL水平合并

一、SQL水平合并基本语法 sql的合并有两步&#xff0c;step1&#xff1a;进行笛卡尔乘积运算&#xff0c;第一个表的每一行合并第二个表的每一行&#xff0c;即表a有3行&#xff0c;表b有3行&#xff0c;则合并后3*39行。笛卡尔过程包含源数据的所有列&#xff0c;相同列名会合…

JavaScript的单元挑战

Steven想要建立一个非常简单的小费计算器&#xff0c;以便他去餐厅吃饭时使用。在他的国家&#xff0c;如果账单金额在50到300之间&#xff0c;通常会给15%的小费。如果金额不同&#xff0c;小费就是20%。 您的任务是根据账单金额计算小费。为此创建一个名为’tip’的变量。不允…

2023天猫休闲零食市场分析(天猫数据分析软件)

基于较大的人口基数以及人们对休闲零食的需求&#xff0c;我国的休闲零食市场始终保持着稳健的增长趋势&#xff0c;行业整体的规模也比较大。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年1月份至4月份&#xff0c;天猫平台上休闲零食行业的销量为6亿&#xff…

对模版以及模版中参数的理解

所谓模板&#xff0c;实际上是建立一个通用函数或类&#xff0c;其类内部的类型和函数的形参类型不具体指定&#xff0c;用一个虚拟的类型来代表。 就比方说你想要实现 一个Add的加法函数&#xff0c;面对不同的类型&#xff0c;你是否要进行多次函数重载呢&#xff0c;其实这多…

网络安全(黑客)自学的误区

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而…

许战海咨询方法论系列白皮书在京隆重发布

新时代&#xff0c;面对剧烈变化的竞争环境&#xff0c;企业如何实现结构性增长&#xff1f; 7月31日&#xff0c;许战海咨询最新研究成果——《主品牌进化战略》、《第二招牌增长战略》、《链主品牌&#xff1a;制造业的竞争之王》三本核心方法论白皮书&#xff0c;重磅发布。…

移动端网页div下滑消失、上滑出现(附带闪烁效果)

<div :class "IconShow ? mhomeIcon : IconOff"><img src"/assets/news.svg" alt""></div>// 距离顶部的距离const top ref(0) // 图标向上还是向下滑动const IconShow ref(true)// 滑动监听&#xff0c; 注意如果只有doc…

【C++】深入浅出STL之vector类

文章篇幅较长&#xff0c;越3万余字&#xff0c;建议电脑端访问 文章目录 一、前言二、vector的介绍及使用1、vector的介绍2、常用接口细述1&#xff09;vector类对象的默认成员函数① 构造函数② 拷贝构造③ 赋值重载 2&#xff09;vector类对象的访问及遍历操作① operator[]…

zookeeper入门学习

zookeeper入门学习 zookeeper应用场景 分布式协调组件 客户端第一次请求发给服务器2&#xff0c;将flag值修改为false&#xff0c;第二次请求被负载均衡到服务器1&#xff0c;访问到的flag也会是false 一旦有节点发生改变&#xff0c;就会通知所有监听方改变自己的值&#…

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线&#xff0c;并画出来 // 1、 斑块的框 血管二值化图&#xff0c;pca 找到垂直血管壁的直线, 还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标&#xff0c;std::vector<cv::Point> points;for (int y 0; y <…

Stable Diffusion教程(6) - 扩展安装

打开stable diffusion webUI界面 加载插件列表 依次点击扩展->可用->加载自 搜索插件 首先在搜索框输入你要安装的插件&#xff0c;然后点击插件后面的安装按钮 如果你需要的插件这里面没有找到&#xff0c;可通过通网址安装的方式安装。 在git仓库网址输入框输入的你插件…

警惕!中科院预警,Frontiers这本不被收录!2023年7月EI目录已更新!(附全年下载)

2023年7月EI期刊目录更新 爱思唯尔官网近日更新了EI期刊目录&#xff0c;此次更新是2023年7月1日&#xff0c;与上次更新&#xff08;2023年6月&#xff09;相比&#xff0c;有1本期刊名称在Serials&#xff08;连续出版&#xff09;列表中搜索不到&#xff0c;详情如下&#…

InfiniBand、UCIe相关思考

InfiniBand、UCIe相关思考 内容1、InfiniBandInfiniBand是什么&#xff1f;InfiniBand的来历是什么&#xff1f;InfiniBand为什么重要&#xff1f;InfiniBand相较于Ethernet区别&#xff1f;同领域内还有其他哪些技术&#xff1f;InfiniBand中RDMA是种什么技术&#xff1f; 内容…

【Linux】计算机网络的背景和协议分层

文章目录 网络发展协议何为协议网络协议协议分层OSI七层模型TCP/IP五层模型&#xff08;四层&#xff09; 基本通信流程mac地址和ip地址网络通信本质 网络发展 从一开始计算机作为一台台单机使用&#xff0c;到现在网络飞速发展&#xff0c;从局域网Lan建立起局域网&#xff0…

【零基础学Rust | 基础系列 | Cargo工具】Cargo介绍及使用

文章目录 前言一&#xff0c;Cargo介绍1&#xff0c;Cargo安装2&#xff0c;创建Rust项目2&#xff0c;编译项目&#xff1a;3&#xff0c;运行项目&#xff1a;4&#xff0c;测试项目&#xff1a;5&#xff0c;更新项目的依赖&#xff1a;6&#xff0c;生成项目的文档&#xf…

什么运动耳机好用?市面上公认表现最好的几款耳机

随着技术的发展&#xff0c;运动蓝牙耳机这个类别已经进化到了骨传导的形式&#xff0c;也受到了广大运动爱好者的一致好评。作为爱运动的玩家&#xff0c;我一直在找可以兼顾运动和音质的骨传导&#xff0c;最近体验到了几款表现还不错的无线骨传导耳机&#xff0c;跟大家分享…

JAVASE---继承和多态

继承 比如&#xff0c;狗和猫&#xff0c;它们都是一个动物&#xff0c;有共同的特征&#xff0c;我们就可以把这种特征抽取出来。 像这样把相同的可以重新放到一个类里面&#xff0c;进行调用&#xff0c;这就是继承。 概念 继承(inheritance)机制&#xff1a;是面向对象程…

Java记录一次生产CPU飙升查找原因

java项目:项目定制化产品的微服务,主要做查es的定时任务和报表统计,实时监控数据. 上线几天,cpu报警 看图: 排查思路: 七八个定时任务同时查es,可能造成的飙升,然后只能拿jstack分析,生产环境慎用. jstack是Java开发工具包中的一个命令行工具&#xff0c;用于生成Java虚拟机&…