VB6中FSO具体应用详解

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

您正在看的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.rhkb.cn/news/74099.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

认识主被动无人机遥感数据、预处理无人机遥感数据、定量估算农林植被关键性状、期刊论文插图精细制作与Appdesigner应用开发

目录 第一章、认识主被动无人机遥感数据 第二章、预处理无人机遥感数据 第三章、定量估算农林植被关键性状 第四章、期刊论文插图精细制作与Appdesigner应用开发 更多推荐 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的…

PHP语言基础知识(超详细)

文章目录 前言第一章 PHP语言学习介绍 1.1 PHP部署安装环境1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍2.2 PHP常量变量介绍 2.2.1 PHP变量知识&#xff1a;2.2.2 PHP常量知识&#xff1a; 2.3 PHP注释信息介绍2.4 PHP数据类型介绍 2.4.1 整形数据类型2.4…

基于量子同态的安全多方量子求和加密

摘要安全多方计算在经典密码学中一直扮演着重要的角色。量子同态加密(QHE)可以在不解密的情况下对加密数据进行计算。目前&#xff0c;大多数协议使用半诚实的第三方(TP)来保护参与者的秘密。我们使用量子同态加密方案代替TP来保护各方的隐私。在量子同态加密的基础上&#xff…

2023年自动化测试已成为标配?一篇彻底打通自动化测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先我们从招聘岗…

《面试1v1》ElasticSearch 和 Lucene

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

智慧~经典开源项目数字孪生智慧商场——开源工程及源码

深圳南山某商场的工程和源码免费赠送&#xff0c;助您打造智慧商场。立即获取&#xff0c;提升商场管理效能&#xff01; 项目介绍 凤凰商场作为南山地区的繁华商业中心&#xff0c;提供多样化的购物和娱乐体验。通过此项目&#xff0c;凤凰商场将迈向更智能的商业模式。 本项目…

基于SaaS模式的Java基层卫生健康云HIS系统源码【运维管理+运营管理+综合监管】

云HIS综合管理平台 一、模板管理 模板分为两种&#xff1a;病历模板和报表模板。模板管理是运营管理的核心组成部分&#xff0c;是基层卫生健康云中各医疗机构定制电子病历和报表的地方&#xff0c;各医疗机构可根据自身特点特色定制电子病历和报表&#xff0c;制作的电子病历…

Python-Python基础综合案例:数据可视化 - 折线图可视化

版本说明 当前版本号[20230729]。 版本修改说明20230729初版 目录 文章目录 版本说明目录知识总览图Python基础综合案例&#xff1a;数据可视化 - 折线图可视化json数据格式什么是jsonjson有什么用json格式数据转化Python数据和Json数据的相互转化 pyecharts模块介绍概况如何…

Golang 函数参数的传递方式 值传递,引用传递

基本介绍 我们在讲解函数注意事项和使用细节时&#xff0c;已经讲过值类型和引用类型了&#xff0c;这里我们再系统总结一下&#xff0c;因为这是重难点&#xff0c;值类型参数默认就是值传递&#xff0c;而引用类型参数默认就是引用传递。 两种传递方式&#xff08;函数默认都…

BUG分析以及BUG定位

一般来说bug大多数存在于3个模块&#xff1a; 1、前台界面&#xff0c;包括界面的显示&#xff0c;兼容性&#xff0c;数据提交的判断&#xff0c;页面的跳转等等&#xff0c;这些bug基本都是一眼可见的&#xff0c;不太需要定位&#xff0c;当然也不排除一些特殊情况&#xf…

《cuda c编程权威指南》04 - 使用块和线程索引映射矩阵索引

目录 1. 解决的问题 2. 分析 3. 方法 4. 代码示例 1. 解决的问题 利用块和线程索引&#xff0c;从全局内存中访问指定的数据。 2. 分析 通常情况下&#xff0c;矩阵是用行优先的方法在全局内存中线性存储的。如下。 8列6行矩阵&#xff08;nx,ny&#xff09;&#xff08;…

Kafka-消费者组消费流程

消费者向kafka集群发送消费请求&#xff0c;消费者客户端默认每次从kafka集群拉取50M数据&#xff0c;放到缓冲队列中&#xff0c;消费者从缓冲队列中每次拉取500条数据进行消费。

时序预测 | Python实现NARX-DNN空气质量预测

时序预测 | Python实现NARX-DNN空气质量预测 目录 时序预测 | Python实现NARX-DNN空气质量预测效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 时序预测 | Python实现NARX-DNN空气质量预测 研究内容 Python实现NARX-DNN空气质量预测,使用深度神经网络对比利时空气…

PDF文件忘记密码,怎么办?

PDF文件设置密码分为打开密码和限制密码&#xff0c;忘记了密码分别如何解密PDF密码&#xff1f; 如果是限制编辑密码忘记了&#xff0c;我们可以试着将PDF文件转换成其他格式来避开限制编辑&#xff0c;然后重新将文件转换回PDF格式就可以了。 如果因为转换之后导致文件格式…

如何打造属于自己的个人IP?

在当今信息爆炸的时代&#xff0c;个人 IP 已经成为人们在网络世界中的独特标签。无论是在职场上、创业中&#xff0c;还是在社交生活中&#xff0c;拥有个人 IP 的人都能脱颖而出&#xff0c;吸引更多的关注和机会。那么&#xff0c;如何打造属于自己的个人 IP 呢&#xff1f;…

go 如何知道一个对象是分配在栈上还是堆上?

如何判断变量是分配在栈&#xff08;stack&#xff09;上还是堆&#xff08;heap&#xff09;上&#xff1f; Go和C不同&#xff0c;Go局部变量会进行逃逸分析。如果变量离开作用域后没有被引用&#xff0c;则优先分配到栈上&#xff0c;否则分配到堆上。判断语句&#xff1a;…

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

如何开启一个java微服务工程

安装idea IDEA常用配置和插件&#xff08;包括导入导出&#xff09; https://blog.csdn.net/qq_38586496/article/details/109382560安装配置maven 导入source创建项目 修改项目编码utf-8 File->Settings->Editor->File Encodings 修改项目的jdk maven import引入…

flask中写一个基础的sqlHelper类

写一个SQLHelper类&#xff1a; from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()class SQLHelper:staticmethoddef add(record):db.session.add(record)return SQLHelper.session_commit()staticmethoddef add_all(records):db.session.add_all(records)return SQLH…

基于dockerfile构建sshd、httpd、nginx、tomcat、mysql、lnmp、redis镜像

一、镜像概述 Docker 镜像是Docker容器技术中的核心&#xff0c;也是应用打包构建发布的标准格式。一个完整的镜像可以支撑多个容器的运行&#xff0c;在Docker的整个使用过程中&#xff0c;进入一个已经定型的容器之后&#xff0c;就可以在容器中进行操作&#xff0c;最常见的…