Skip to content

VBMAN.ToolsFso - 文件系统操作对象

概述

VBMAN.ToolsFso 提供了文件系统相关的便捷操作,封装了常用的文件和目录处理功能,简化文件系统编程。

核心特性

  • 自动目录创建: 一次性创建多级目录
  • 路径处理: 自动补全、清理路径分隔符
  • 文件信息: 获取文件名、扩展名、目录名等
  • 引用封装: 直接访问 FileSystemObject 实例

属性

属性类型说明
InstScripting.FileSystemObjectFSO 实例对象

方法

AutoMakeDir

自动创建目录(支持多级)

vb
Public Function AutoMakeDir(ByVal Path As String, Optional IsFile As Boolean) As String

参数:

  • Path - 目录路径或文件路径
  • IsFile - 是否为文件路径(True时提取目录部分创建)

返回: 清理后的目录路径

示例:

vb
' 创建多级目录
VBMAN.ToolsFso.AutoMakeDir "C:\\MyApp\\Data\\Users"

' 自动提取目录创建(用于文件路径)
VBMAN.ToolsFso.AutoMakeDir "C:\\MyApp\\Logs\\app.log", True
' 实际创建 C:\MyApp\Logs 目录

' 返回值可用于确认
Dim dirPath As String
dirPath = VBMAN.ToolsFso.AutoMakeDir("C:\\MyApp\\Data")
Debug.Print "创建/确认目录: " & dirPath

ClearSpan

清理路径分隔符(统一为反斜杠)

vb
Public Function ClearSpan(Path As String, Optional IsFile As Boolean) As String

示例:

vb
' 统一路径分隔符
Dim path1 As String
path1 = VBMAN.ToolsFso.ClearSpan("C:/MyApp//Data\\Users/")
' 结果: C:\MyApp\Data\Users\

' 文件路径(不添加末尾分隔符)
Dim path2 As String
path2 = VBMAN.ToolsFso.ClearSpan("C:/MyApp//file.txt", True)
' 结果: C:\MyApp\file.txt

IsFullPath

判断是否为完整路径

vb
Public Function IsFullPath(Path As String) As Boolean

示例:

vb
If VBMAN.ToolsFso.IsFullPath("C:\\test.txt") Then
    Debug.Print "完整路径"
Else
    Debug.Print "相对路径"
End If

AutoCompleteFullPath

自动补全为完整路径

vb
Public Function AutoCompleteFullPath(Path As String, Optional IsFile As Boolean) As String

示例:

vb
' 相对路径转为完整路径
Dim fullPath As String
fullPath = VBMAN.ToolsFso.AutoCompleteFullPath("data\\config.ini")
' 结果: C:\Program\MyApp\data\config.ini(基于 App.Path)

AppPath

获取应用路径(支持开发/运行模式切换)

vb
Public Function AppPath(Optional ByVal Path As String) As String

说明: 开发模式(IDE中)返回 App.Path\..\dist\EXE\,运行模式返回 App.Path\

示例:

vb
' 获取应用相关路径
Dim configPath As String
configPath = VBMAN.ToolsFso.AppPath("config.ini")
' 开发模式: C:\Project\..\dist\EXE\config.ini
' 运行模式: C:\Program\MyApp\config.ini

MakeNewFileFulPath

生成新的文件路径(添加后缀)

vb
Public Function MakeNewFileFulPath(FileSrc As String, AppendFix As String, Optional JoinStr As String = "_") As String

示例:

vb
' 生成备份文件名
Dim backupFile As String
backupFile = VBMAN.ToolsFso.MakeNewFileFulPath("C:\\data\\report.pdf", "backup")
' 结果: report_backup.pdf

' 使用时间戳
Dim datedFile As String
datedFile = VBMAN.ToolsFso.MakeNewFileFulPath("report.pdf", Format(Now, "yyyymmdd"))
' 结果: report_20240115.pdf

Inst 属性使用

ToolsFso.InstScripting.FileSystemObject 的实例,可以使用 FSO 的所有方法:

vb
' 检查文件是否存在
If VBMAN.ToolsFso.Inst.FileExists("C:\\test.txt") Then
    Debug.Print "文件存在"
End If

' 检查目录是否存在
If VBMAN.ToolsFso.Inst.FolderExists("C:\\MyApp") Then
    Debug.Print "目录存在"
End If

' 获取文件名(不含扩展名)
Dim baseName As String
baseName = VBMAN.ToolsFso.Inst.GetBaseName("C:\\data\\report.pdf")
' 结果: report

' 获取扩展名
Dim ext As String
ext = VBMAN.ToolsFso.Inst.GetExtensionName("report.pdf")
' 结果: pdf

' 获取目录名
Dim folder As String
folder = VBMAN.ToolsFso.Inst.GetParentFolderName("C:\\data\\file.txt")
' 结果: C:\data

' 获取完整文件名
Dim fileName As String
fileName = VBMAN.ToolsFso.Inst.GetFileName("C:\\data\\file.txt")
' 结果: file.txt

' 复制文件
VBMAN.ToolsFso.Inst.CopyFile "source.txt", "dest.txt", True

' 移动文件
VBMAN.ToolsFso.Inst.MoveFile "old.txt", "new.txt"

' 删除文件
VBMAN.ToolsFso.Inst.DeleteFile "temp.txt", True

' 复制目录
VBMAN.ToolsFso.Inst.CopyFolder "C:\\source", "C:\\dest", True

' 获取文件对象
Dim fileObj As File
Set fileObj = VBMAN.ToolsFso.Inst.GetFile("C:\\test.txt")
Debug.Print fileObj.Size  ' 文件大小
Debug.Print fileObj.DateCreated  ' 创建时间

' 获取目录对象
Dim folderObj As Folder
Set folderObj = VBMAN.ToolsFso.Inst.GetFolder("C:\\MyApp")
Debug.Print folderObj.SubFolders.Count  ' 子目录数
Debug.Print folderObj.Files.Count  ' 文件数

综合示例

示例1: 日志目录初始化

vb
Private Sub InitLogDirectory()
    ' 确保日志目录存在
    Dim logDir As String
    logDir = VBMAN.ToolsFso.AppPath("logs")
    VBMAN.ToolsFso.AutoMakeDir logDir
    
    ' 创建按日期的子目录
    Dim todayDir As String
    todayDir = logDir & "\\" & Format(Now, "yyyy-MM-dd")
    VBMAN.ToolsFso.AutoMakeDir todayDir
    
    Debug.Print "日志目录: " & todayDir
End Sub

示例2: 安全文件保存

vb
Private Sub SaveFileSafely(sourcePath As String)
    ' 检查源文件是否存在
    If Not VBMAN.ToolsFso.Inst.FileExists(sourcePath) Then
        MsgBox "源文件不存在!"
        Exit Sub
    End If
    
    ' 确保目标目录存在
    Dim destDir As String
    destDir = App.Path & "\\Backup"
    VBMAN.ToolsFso.AutoMakeDir destDir
    
    ' 生成备份文件名
    Dim destPath As String
    Dim fileName As String
    fileName = VBMAN.ToolsFso.Inst.GetFileName(sourcePath)
    destPath = destDir & "\\" & VBMAN.ToolsFso.MakeNewFileFulPath(fileName, Format(Now, "yyyymmdd_hhmmss"))
    
    ' 复制文件
    VBMAN.ToolsFso.Inst.CopyFile sourcePath, destPath, True
    
    MsgBox "文件已备份到: " & destPath
End Sub

示例3: 遍历目录文件

vb
Private Sub ListAllFiles(folderPath As String, listBox As ListBox)
    If Not VBMAN.ToolsFso.Inst.FolderExists(folderPath) Then
        MsgBox "目录不存在!"
        Exit Sub
    End If
    
    Dim folder As Folder
    Dim file As File
    Dim subFolder As Folder
    
    Set folder = VBMAN.ToolsFso.Inst.GetFolder(folderPath)
    
    ' 添加当前目录文件
    For Each file In folder.Files
        listBox.AddItem file.Path & " (" & file.Size & " bytes)"
    Next file
    
    ' 递归遍历子目录
    For Each subFolder In folder.SubFolders
        ListAllFiles subFolder.Path, listBox
    Next subFolder
End Sub

示例4: 清理临时文件

vb
Private Sub CleanTempFiles()
    Dim tempDir As String
    tempDir = App.Path & "\\Temp"
    
    If Not VBMAN.ToolsFso.Inst.FolderExists(tempDir) Then
        Exit Sub
    End If
    
    Dim folder As Folder
    Dim file As File
    Dim deletedCount As Long
    
    Set folder = VBMAN.ToolsFso.Inst.GetFolder(tempDir)
    
    For Each file In folder.Files
        ' 删除超过7天的文件
        If DateDiff("d", file.DateLastModified, Now) > 7 Then
            file.Delete True
            deletedCount = deletedCount + 1
        End If
    Next file
    
    MsgBox "清理了 " & deletedCount & " 个临时文件"
End Sub

最佳实践

  1. 使用 AutoMakeDir: 在操作文件前确保目录存在
  2. 使用 AppPath: 处理开发和运行环境路径差异
  3. 检查存在性: 操作前检查文件/目录是否存在
  4. 错误处理: 添加 On Error 处理文件操作异常
  5. 及时释放: 使用完 File/Folder 对象后设为 Nothing

VB6及其LOGO版权为微软公司所有