VBMAN.ToolsFso - 文件系统操作对象
概述
VBMAN.ToolsFso 提供了文件系统相关的便捷操作,封装了常用的文件和目录处理功能,简化文件系统编程。
核心特性
- 自动目录创建: 一次性创建多级目录
- 路径处理: 自动补全、清理路径分隔符
- 文件信息: 获取文件名、扩展名、目录名等
- 引用封装: 直接访问 FileSystemObject 实例
属性
| 属性 | 类型 | 说明 |
|---|---|---|
Inst | Scripting.FileSystemObject | FSO 实例对象 |
方法
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 "创建/确认目录: " & dirPathClearSpan
清理路径分隔符(统一为反斜杠)
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.txtIsFullPath
判断是否为完整路径
vb
Public Function IsFullPath(Path As String) As Boolean示例:
vb
If VBMAN.ToolsFso.IsFullPath("C:\\test.txt") Then
Debug.Print "完整路径"
Else
Debug.Print "相对路径"
End IfAutoCompleteFullPath
自动补全为完整路径
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.iniMakeNewFileFulPath
生成新的文件路径(添加后缀)
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.pdfInst 属性使用
ToolsFso.Inst 是 Scripting.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最佳实践
- 使用 AutoMakeDir: 在操作文件前确保目录存在
- 使用 AppPath: 处理开发和运行环境路径差异
- 检查存在性: 操作前检查文件/目录是否存在
- 错误处理: 添加 On Error 处理文件操作异常
- 及时释放: 使用完 File/Folder 对象后设为 Nothing