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 是具有边缘效应的函数。

第一次调用DirMyName = Dir(MyPath, vbDirectory) 初始化Dir 内部并返回第一个目录条目。

Dir 的后续调用使用相同的上下文,一一产生MyPath 目录内容。

它不是可重入的(这也是为什么你不能使用 Dir 嵌套/递归多个循环的原因),不是很优雅,但它就是这样工作的。

【讨论】:

这也是为什么你不能使用 Dir 嵌套多个循环 @TimWilliams 对,不可重入!如果你想这样做,你必须存储完整的文件列表,然后执行递归调用。 我承认不清楚“可重入”(直到我刚刚查了一下)......【参考方案2】:

根据Dir() MSDN,它

返回一个字符串,该字符串表示与指定模式或文件属性或驱动器卷标匹配的文件、目录或文件夹的名称。

【讨论】:

跟随您的链接,我偶然发现了 OP 发布的示例代码。

以上是关于dir()函数理解的主要内容,如果未能解决你的问题,请参考以下文章

模块之dir函数

dir 函数

python函数回顾:dir()

dir函数

DIR - matlab函数

MATLAB 的 dir函数fullfile函数