`
sfp69sfp
  • 浏览: 19793 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

系统文件递归查询

阅读更多

系统文件递归查询
2012年01月11日
  文件系统对象也能实现递归调用
  [b] [
摘要]:针对文件系统对象(FileSystemObject)进行特殊的函数编程,也能实现递归调用,可以在VB、ASP、VBS等语言中广泛使用,以实现文件的快速查找等。
  关键词:文件系统对象,引用,递归,调用
  The File System Object can be Achieved Recursive Call
  Wang ruixue1 ,Ma wenchao1 ,Wang duomin1
  1. Meteorological Bureau of  Alxa League, Inner Mongolia  Alxa League  750306
  [Abstract]We can proceed special function programming According to the file system object (FileSystemObject), also can realize recursively, can be widely used in such  VB、 ASP、VBS language, in order to realize the files quickly found etc.
  Key words: FileSystemObject,quoted,Recursion,calling
  递归调用就是子程序自己调用自己。在以往的VB、ASP编程中,当我们需要目录的递归调用时,往往需要内部函数Dir以及API来实现。本文以vb及脚本为例,说明文件系统对象(FSO)也能递归调用。 FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Scrrun.dll文件中,通过[属性]菜单的[引用]对话框选择“Microsoft Scripting Runtime”项来引用,在引用了该类型库后就可以创建使用该文件系统对象。
  以下函数利用文件系统对象(FSO)枚举指定目录下的所有子目录及文件,自定义递归函数如下:
  Public Sub Fso_Dir(Optional ByVal initialFolderPath As String = "c:\", Optional ByVal Folder As Folder = Nothing, Optional blCreateObjFlag As Boolean = True)
  'On Error Resume Next
  Dim Fso  As FileSystemObject
  Dim file As file, Subforld As Folder
  ' blCreateObjFlag是否需要创建文件系统对象的标志,初次为真,以后全部设置为假
  If blCreateObjFlag Then
  Set Fso = CreateObject("Scripting.FileSystemObject")
  If Right(initialFolderPath, 1)  "\" Then initialFolderPath = initialFolderPath & "\"
  If Dir(initialFolderPath, vbDirectory) = "" Then Exit Sub '不存在最初设定的目录退出
  Set Folder = Fso.GetFolder(initialFolderPath)
  End If
  For Each file In Folder.Files'显示某文件夹中的所有文件。
  Debug.Print "文件:" & file.Path '显示文件
  Next
  For Each SubFolder In Folder.SubFolders
  Debug.Print "文件夹:" & SubFolder.Name '显示文件夹
  Fso_Dir , SubFolder, False '同一个文件系统对象内部文件夹的递归调用
  Next
  Set Fso = Nothing '最后释放该文件系统对象
  End Sub
  函数的所有参数都是可选参数。第一个参数的缺省路径是:c:\,它是要递归的初始路径,即从什么路径开始递归。当然调用时可以根据实际需要来改变,如:call FsoDoDir("D:\mapx\"),就是将默认值”c:\”改成了”D:\mapx\”。
  第二个参数Folder初始设置为Nothing,,即在调用Fso_Dir(…)该过程前,Folder不再引用任何实际对象,缺省为Nothing。
  第三个参数blCreateObjFlag设置为TRUE,,即最初调用中仅一次性创建一个文件系统对象,其后的整个递归过程中全部将其设置为假,也就是限定在一个文件系统对象内部进行递归调用。 blCreateObjFlag是一个标志性参数,表示是否需要创建文件系统对象, blCreateObjFlag也是能否实现递归调用的关键性参数。
  调用该函数方法如下:
  call FsoDoDir("d:\vb\")或Fso_Dir "D:\mx5\"
  也可以什么参数都不用,因为自定义函数都是可选参数,递归的起点路径默认为c:\,如:
  Call FsoDoDir
  最后值得一提的是,在vbs脚本语言中,不必引用文件系统对象,只要创建文件系统对象如:set fso=CreateObject("Scripting.FileSystemObject"),就可以直接使用它,非常方便。
  Vb脚本文件系统的递归法方法如下:
  Option Explicit
  Dim FSO
  Set FSO = CreateObject("Scripting.FileSystemObject")
  DoDir FSO.GetFolder("c:\ ")
  pause
  Sub DoDir(Folder)
  'On Error Resume Next
  Dim File,SubFolder
  For Each File In Folder.Files
  WScript.StdOut.WriteLine File.Path
  Next
  For Each SubFolder in Folder.SubFolders
  DoDir SubFolder'同一个文件系统对象内部文件夹的递归调用
  Next
  Set FSO=Nothing    
  End Sub
  使用 Cscript.exe,可以通过在命令提示符下键入脚本文件的名称来运行脚本。若将以上脚本内容复制到后缀名为.vbs的文件中。在批处理中,写入如:CScript wrxRecursion.vbs可以运行vb脚本;在批处理中写入pause可以暂停命令窗口来查看输出结果。
  参考文献
  1陈明.Visual Basic程序设计.北京:中央广播电视大学出版社,2003.364-367.
  2 国瑞军. Visual Basic数据库开发精粹(第二版).北京:电子工业出版社,2007.1-15.
  3 赵松涛.Visual Basic+SQL Server 2000 系统开发实录.北京.电子工业出版社,2007.134-177.
  4 微软公司.Microsoft Windows 脚本技术(电子版).美国,2001.
  [/b]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics