2011-04-28 72 views
4

尽管在documentation中没有提到,Directory.GetDirectories()似乎总是返回按字典顺序排序的目录名称数组。依靠这个实现细节是否安全(它适合我的需要)还是应该是偏执狂,并根据需要对我的目录列表进行排序?Directory.GetDirectories()返回的目录顺序是否有保证?

[Test] 
public void SortedDirectories() 
{ 
    string[] directories = Directory.GetDirectories(@"C:\Windows"); 
    Assert.That(directories, Is.Ordered); 
} 

回答

6

你看到的是NTFS的神器。其他文件系统(特别是FAT或网络文件系统)可能不会显示相同的行为。

如果您需要将收集进行排序,请自行排序(可能首先检查它是否已经排序,因为这可能是一种可能的情况)。

例如,下面的程序:

using System; 
using System.IO; 
using System.Collections; 

public class Foo 
{ 
    public static void Main(string[] args) 
    { 
     string[] subdirectoryEntries = Directory.GetDirectories(@"j:\"); 

     foreach (string d in subdirectoryEntries) { 
      Console.WriteLine(d); 
     } 
    } 
} 

显示此输出为我的FAT格式化记者:驱动器:

j:\Qualcomm 
j:\Precor 
j:\EditPadPro 
j:\Qt 

而且,即使NTFS排序目录条目,它可能不会对它们进行排序途径you想要:Old New Thing - Why do NTFS and Explorer disagree on filename sorting?

5

如果它的一个未公开的实现细节,那么你不应该依赖它。即使它现在成立,框架的未来版本也没有义务保持这种行为。

3

不!它在NTFS上就像那样工作。

我们有一个NAS网络服务器运行Linux,我们得到不幸的是混沌行为......

也许它按访问日期或东西,但它是不同步什么,你会在你的本地分区或见NTFS网络共享...

这就是为什么我建议你偏执狂:D

相关问题