dir()函数理解
Posted
技术标签:
【中文标题】dir()函数理解【英文标题】:Dir() function understanding 【发布时间】:2017-01-09 11:28:23 【问题描述】:' Display the names in C:\ that represent directories.
MyPath = "c:\" ' Set the path.
MyName = Dir(MyPath, vbDirectory) ' Retrieve the first entry.
Do While MyName <> "" ' Start the loop.
' Use bitwise comparison to make sure MyName is a directory.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
' Display entry only if it's a directory.
MsgBox(MyName)
End If
MyName = Dir() ' Get next entry.
Loop
我正在查看上面的代码。我特别不明白“MyName = Dir()”的作用。有人评论说它获得了下一个条目,但我不明白它是如何获得下一个条目的——特别是 Dir() 在做什么?
【问题讨论】:
我建议你使用 FileSystemObject 或 FileDialog 而不是 Dir()。 @ExcelDevelopers 为什么?FileSystemObject
非常更容易用于此类任务。上面的代码基本上可以归结为:For Each foo In CreateObject("Scripting.FileSystemObject").GetFolder("C:\").SubFolders: MsgBox (foo.Path): Next
@Comintern 你能解释一下“Scripting.FileSystemObject”部分吗?为什么需要脚本方面
这只是对象来自的库 - 它是“Microsoft Scripting Runtime”的一部分。您也可以通过添加引用来提前绑定它。 There are examples in Documentation.
【参考方案1】:
Dir
是具有边缘效应的函数。
第一次调用Dir
:MyName = Dir(MyPath, vbDirectory)
初始化Dir
内部并返回第一个目录条目。
对Dir
的后续调用使用相同的上下文,一一产生MyPath
目录内容。
它不是可重入的(这也是为什么你不能使用 Dir 嵌套/递归多个循环的原因),不是很优雅,但它就是这样工作的。
【讨论】:
这也是为什么你不能使用 Dir 嵌套多个循环 @TimWilliams 对,不可重入!如果你想这样做,你必须存储完整的文件列表,然后执行递归调用。 我承认不清楚“可重入”(直到我刚刚查了一下)......【参考方案2】:根据Dir()
MSDN,它
返回一个字符串,该字符串表示与指定模式或文件属性或驱动器卷标匹配的文件、目录或文件夹的名称。
【讨论】:
跟随您的链接,我偶然发现了 OP 发布的示例代码。以上是关于dir()函数理解的主要内容,如果未能解决你的问题,请参考以下文章