为什么For Each循环返回的文件已排序,但并非总是如此?

时间:2013-07-04 20:48:04

标签: vbscript filesystemobject

我不确定这是否是发布此问题的正确位置,因为我有预感,我见证的行为也将使用其他方法观察到。但无论如何,这就是它。

我有一个包含如下代码的VBscript:

For Each objFile In colFiles
...
Next

我在很多不同的系统上运行这段代码已经有一段时间了。我从不打扰按字母顺序排序文件。但今天我偶然发现我的程序逻辑依赖于它。我在新系统上运行代码(在Citrix下),文件以看似随机的顺序返回。

有人知道为什么Windows有时会按字母顺序返回文件,而有时却没有?

添加注释:可能需要注意脚本和输入文件夹位于网络共享上(我的脚本输出随机排序的文件)。

3 个答案:

答案 0 :(得分:2)

FileSystemObject不支持排序。见KB 189751 http://support.microsoft.com/kb/189751/en-us

另请查看有关如何在SO Order of Files collection in FileSystemObject

上处理该问题的答案

答案 1 :(得分:1)

docs未指定排序。因此,您不能依赖它来订购。 Files属性需要向底层文件系统询问文件,然后将其提供给您,而不进行任何处理。如果该文件系统碰巧按顺序返回文件,那就太好了。如果没有,你将不得不对它进行排序。无论它是否有序,如果您按照特定顺序预期,总是订购它,因为明天的实施可能会改变(正如您刚刚目睹的那样)。

答案 2 :(得分:0)

这取决于您循环的数据结构。 例如,如果在数组和散列集中使用foreach循环,显然会得到不同的顺序。 就个人而言,我对VB一无所知。但它确实在C#中起作用。