Folder 类
IDE 虚拟文件系统中的文件夹。扩展 FileSystemItem,增加了子项枚举能力——Count、Item,以及标准的 For Each 迭代,将每个子项作为 FileSystemItem 产出(使用 TypeOf 区分文件夹和文件)。
Folder 还继承了通用的 FileSystemItem 成员——Name、Path、Type、Parent。最常见的入口点是 Host.CurrentProject.RootFolder,最常见的操作是 For Each 递归遍历。
Private Sub WalkAllFiles(ByVal folder As Folder)
Dim item As FileSystemItem
For Each item In folder
If TypeOf item Is Folder Then
WalkAllFiles item
Else
Dim file As File = item
' …处理文件
End If
Next
End SubWARNING
twinBASIC IDE 是多线程的。当插件持有对文件夹的引用时,同一文件夹可能发生变化——文件到达、文件消失、索引重新编号。遍历文件夹的支持方式是 For Each;通过 Count / Item 的基于索引的访问与 IDE 自身线程竞争,有时会遗漏或重复条目。遍历时始终优先使用 For Each。
属性
Count
文件夹中当前的项数。Long,只读。
WARNING
该值可能在两次读取之间发生变化——IDE 是多线程的。不要将其用作 For i = 0 To Count - 1 的循环边界;应使用 For Each。
IsPackagesFolder
如果此文件夹是项目的特殊 Packages 文件夹(包含每个引用包的源代码树),则为 True。Boolean,只读。
在为源代码搜索而遍历项目时很有用——搜索用户代码的插件通常希望跳过包源代码:
If folder.IsPackagesFolder And Not searchInsidePackages Then Exit SubItem
子项的索引或命名访问。DefaultMember——因此 folder(0) 等同于 folder.Item(0),folder("MainModule.twin") 等同于 folder.Item("MainModule.twin")。
语法:folder( IndexOrName ) As FileSystemItem
- IndexOrName
- 一个 Variant —— 基于 0 的 Long 索引或 String 子项名称。
WARNING
数字索引与 IDE 自身线程竞争——索引 n 处的项在调用返回时可能已改变身份。命名查找更安全;For Each 遍历更加安全。