5

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

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

3 回答 3

6

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

于 2011-04-28T00:21:39.857 回答
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: 驱动器显示此输出:

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

此外,即使 NTFS 对目录条目进行排序,它也可能不会按照想要的方式对它们进行排序:老新事物 - 为什么 NTFS 和资源管理器在文件名排序上存在分歧?

于 2011-04-28T00:22:20.630 回答
4

不!它在 NTFS 上的工作方式类似。

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

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

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

于 2011-04-28T00:26:20.897 回答