ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 63442|回复: 97

[分享] FSO之文件及文件夹操作及获取相关属性等

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-21 11:11 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:文件操作和FSO
本帖最后由 liulang0808 于 2014-12-27 08:35 编辑

本来打算把文件操作及文件夹操作一起搞定,时间有限,先发个文件操作


文件系统对象FSO的英文全称是File System Object ,这种对象模型提出了有别于传统的文件操作语句处理文件和文件夹的方法。通过采用object.method这种在面向对象编程中广泛使用的语法,将一系列操作文件和文件夹的动作通过调用对象本身的属性直接实现。

FSO 对象模型不仅可以象使用传统文件操作语句那样实现文件的创建、改变、移动和删除,而且可以检测是否存在指定的文件夹,如果存在,那么,这个文件夹又位于磁盘上的什么位置。更令人高兴的是FSO 对象模型还可以获取关于文件和文件夹的信息,如名称、创建日期或最近修改日期等以及当前系统中使用的驱动器的信息,如驱动器的种类是CD-ROM还是可移动磁盘,当前磁盘的剩余空间还有多少。

此贴以实战为主,各位对原理有深度需求的可以网上查看。

之前发过一些,涉及文件夹等递归遍历,如有需求可以参考如下:


fso提取汇总文件夹及其下的文件名及内容(递归操作字典汇总)



本帖均采用后期绑定

Setfso = CreateObject("Scripting.FileSystemObject")

fso代表任何能够返回FileSystemObject对象的对象

代码框架如下:

Sub 按钮1_Click()

   Application.ScreenUpdating = False

    Set fso =CreateObject("Scripting.FileSystemObject")

'    此处根据具体操作添加代码

   Application.ScreenUpdating = True

End Sub

12楼之后是文件夹有关操作

评分

14

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:12 | 显示全部楼层
1.文件有关的操作
1.1判断文件是否存在
FileExists方法用于判断指定的文件是否存在,若存在则返回True。其语法为:
fso.FileExists(Filepath)
Filepath为文件完整路径,String类型,不能包含有通配符。如果用户有充分的权限,Filepath可以是网络路径或共享名
示例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
    If fso.fileexists(strfile) Then
        MsgBox strfile & " :存在"
    Else
        MsgBox strfile & " :不存在"
    End If
    Application.ScreenUpdating = True
End Sub

FileExists.zip

8.8 KB, 下载次数: 646

评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1.2        移动文件
MoveFile方法用来移动文件,将文件从一个文件夹移动到另一个文件夹。其语法为:
FSO.MoveFile source,destination
参数source必需,指定要移动的文件的路径,String类型。参数destination必需,指定文件移动操作中的目标位置的路径,String类型。
如果Source包含通配符或者destination以路径分隔符结尾,则认为destination是一个路径,否则认为destination的最后一部分是文件名。
如果目标文件已经存在,则将出现一个错误。
source可以包含通配符,但只能出现在它的最后一部分中。
destination参数不能包含通配符。
source或destination可以是相对路径或绝对路径,可以是网络路径或共享名。
MoveFile方法在开始操作前先解析source和destination这两个参数。
实例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sourcefile = ThisWorkbook.Path & "\txt\*" '将txt文件下所有文件移走,首先需要确认是相关文件时针的存在

    destinationfolder = ThisWorkbook.Path & "\tt\" '注意路径格式“tt\”,后面的“\”

    fso.movefile sourcefile, destinationfolder
    Application.ScreenUpdating = True
End Sub

MoveFile.zip

9.69 KB, 下载次数: 499

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:14 | 显示全部楼层

1.3        拷贝文件
CopyFile方法用来复制文件,将文件从一个文件夹复制到另一个文件夹。其语法为:
fso.CopyFile Source,Destination [,OverwriteFiles]
参数Source必需,指定要复制的文件的路径和名称,String类型。参数Destination必需,代表复制文件的目标路径和文件名(可选),String类型。参数OverwriteFiles可选,表示是否覆盖一个现有文件的标志,True表示覆盖,False表示不覆盖,Boolean类型,默认值为True。
参数source中源路径可以是绝对路径或相对路径,源文件名可包含通配符但源路径不能。在参数Destination中不能包含通配符。
如果目标路径或文件设置为只读,则无论OverwriteFiles参数的值如何,都将无法完成CopyFile方法。如果参数OverwriteFiles设置为False且Destination指定的文件已经存在,则会产生一个运行时错误“文件已经存在”。如果在复制多个文件时出现错误,CopyFile方法将立即停止复制操作,该方法不具有撤销错误前文件复制操作的返回功能。如果用户有充分的权限,那么source或destination可以是网络路径或共享名。 CopyFile方法可以复制一个保存在特定文件夹中的文件。如果文件夹本身有包含文件的子文件夹,则使用CopyFile方法不能复制这些文件,应该使用CopyFolder方法。
具体实例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sourcefile = ThisWorkbook.Path & "\txt\*" '将txt文件下所有文件拷贝走,首先需要确认是相关文件时针的存在
    destinationfolder = ThisWorkbook.Path & "\tt\" '注意此处不同于movefile,后面的“\”可以省略,只要确实存在该文件夹
    fso.copyfile sourcefile, destinationfolder
    Application.ScreenUpdating = True
End Sub

CopyFile.zip

9.68 KB, 下载次数: 534

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:15 | 显示全部楼层
1.4        删除文件
DeleteFile方法删除指定的一个或多个文件。其语法为:
fso.DeleteFile FileSpec[,Force]
参数FileSpec必需,代表要删除的单个文件或多个文件的名称和路径,String类型,可以在路径的最后部分包含通配符,可以为相对路径或绝对路径。如果在FileSpec中只有文件名,则认为该文件在应用程序的当前驱动器和文件夹中。参数Force可选,如果将其设置为True,则忽略文件的只读标志并删除该文件,Boolean类型,默认值为False。
如果指定要删除的文件已经打开,该方法将失败并出现一个“Permission Denied”错误。如果找不到指定的文件,则该方法失败。
如果在删除多个文件的过程中出现错误,DeleteFile方法将立即停止删除操作,即不能删除余下的文件部分。该方法不具有撤销产生错误前文件删除操作的返回功能。
如果用户有充分的权限,源路径或目标路径可以是网络路径或共享名。
注意:DeleteFile方法永久性地删除文件,并不把这些文件移到回收站中。
示例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
    fso.deletefile strfile
    Application.ScreenUpdating = True
End Sub

DeleteFile.zip

8.43 KB, 下载次数: 454

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:15 | 显示全部楼层
1.5        GetFileVersion方法
GetFileVersion方法返回文件的版本,貌似很少用到的
fso.GetFileVersion(pathspec) Arguments
pathspec   Required. The path (absolute or relative) to a specific file.
Remarks  The GetFileVersion method returns a zero-length string ("") if pathspec does not end with the named component.
Note:
The GetFileVersion method works only on the provided path string. It does not attempt to resolve the path, nor does it check for the existence of the specified path.
举例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
    GetFVersion = fso.GetFileVersion(strfile)
    If Len(GetFVersion) = 0 Then
        MsgBox "无可用的版本信息"
    Else
        MsgBox GetFVersion
    End If
    Application.ScreenUpdating = True
End Sub

GetFileVersion.zip

8.85 KB, 下载次数: 413

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1.6        GetFile方法
GetFile方法用来返回一个File对象。
其语法为:fso.GetFile (FilePath)
参数FilePath必需,指定路径和文件名,String类型。可以是绝对路径或相对路径。如果FilePath是一个共享名或网络路径,GetFile确认该驱动器或共享是File对象创建进程的一部分。如果参数FilePath指定的路径的任何部分不能连接或不存在,就会产生错误。
GetFile方法返回的是File对象,而不是TextStream对象。File对象不是打开的文件,主要是用来完成如复制或移动文件和询问文件的属性之类的方法。尽管不能对File对象进行写或读操作,但可以使用File对象的OpenAsTextStream方法获得TextStream对象。
要获得所需的FilePath字符串,首先应该使用GetAbsolutePathName方法。如果FilePath包含网络驱动器或共享,可以在调用GetFile方法之前用DriveExists方法来检验所需的驱动器是否可用。
因为在FilePath指定的文件不存在时会产生错误,所以应该在调用GetFile之前调用FileExists方法确定文件是否存在。
必须用Set语句将File对象赋给一个局部对象变量。
具体实例见下面的属性代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 11:18 | 显示全部楼层
1.7        文件的各种属性
具体见实例吧,一看就知道,如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
    Set objfile = fso.GetFile(strfile)
    If fso.fileexists(strfile) Then
      
        sReturn = "文件属性: " & objfile.Attributes & vbCrLf
         
        sReturn = sReturn & "文件创建日期: " & objfile.DateCreated & vbCrLf
         
        sReturn = sReturn & "文件修改日期: " & objfile.DateLastModified & vbCrLf
         
        sReturn = sReturn & "文件大小 " & FormatNumber(objfile.Size / 1024, -1)
         
        sReturn = sReturn & "Kb" & vbCrLf
         
        sReturn = sReturn & "文件类型: " & objfile.Type & vbCrLf

        MsgBox sReturn

    Else
        MsgBox strfile & " :不存在"
    End If
    Application.ScreenUpdating = True
End Sub
2.        文件夹的操作
2.1判断文件夹是否存在
2.2移动文件夹
2.3拷贝文件夹
2.4创建文件夹

获取文件有关属性.zip

10.1 KB, 下载次数: 614

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 15:21 | 显示全部楼层
文件夹的有关操作,有些类似,后续看情况再增补进去吧。。。。。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-21 17:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享,期待后续讲座
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 11:49 , Processed in 0.048480 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表