Directory.GetDirectories()返回的目录的顺序是否保证是有序的?

时间:2011-04-28 00:18:18

标签: .net getdirectories

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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:drive显示此输出:

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

此外,即使NTFS对目录条目进行排序,它也可能不会按照您想要的方式对它们进行排序:Old New Thing - Why do NTFS and Explorer disagree on filename sorting?

答案 2 :(得分:4)

没有!它就像在NTFS上一样。

我们有一台运行Linux的NAS网络服务器,我们不幸会出现混乱的行为......

可能按日期访问或其他东西排序,但它与您在本地分区或NTFS网络共享上看到的内容不同步...

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