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

发布于 2024-11-03 21:34:40 字数 387 浏览 3 评论 0原文

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

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

Although not mentioned in the documentation, Directory.GetDirectories() appears to always return a lexicographically-sorted array of directory names. Is it safe to rely on this implementation detail (it is suitable for my needs) or should I be paranoid and sort my directory lists as needed?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等风来 2024-11-10 21:34:40

您所看到的是 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 和 Explorer 在文件名排序方面存在分歧?

What you're seeing is an artifact of NTFS. Other file systems (specifically FAT or network filesystems) may not show the same behavior.

If you need the collection to be sorted, sort it yourself (maybe check for it already being in order first, since that's probably a likely scenario).

For example, the following program:

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);
        }
    }
}

Displays this output for my FAT formatted J: drive:

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

Also, even though NTFS sorts directory entries, it may not sort them the way you want: Old New Thing - Why do NTFS and Explorer disagree on filename sorting?

思念满溢 2024-11-10 21:34:40

如果它是未记录的实现细节,那么您不应该依赖它。即使现在确实如此,框架的未来版本也没有义务保留这种行为。

If its an undocumented implementation detail then you should not rely on it. Even if it holds true now, future versions of the framework are under no obligation to keep this behaviour.

平定天下 2024-11-10 21:34:40

不!它的工作原理与 NTFS 上的相同。

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

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

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

No! it works like that on NTFS.

We have a NAS network server running Linux and we get unfortunately chaotic behavior...

Maybe it sorts by date accessed or something but it is not in sync with what you would see on your local partition or an NTFS network share...

That is why I suggest you to be paranoid :D

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文