Гарантируется ли порядок каталогов, возвращаемых Directory.GetDirectories (), порядок? - PullRequest
5 голосов
/ 28 апреля 2011

Хотя это и не упомянуто в документации , Directory.GetDirectories(), по-видимому, всегда возвращает отсортированный лексикографически массив имен каталогов.Безопасно ли полагаться на эту деталь реализации (она подходит для моих нужд) или я должен быть параноиком и сортировать списки каталогов по мере необходимости?

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

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

То, что вы видите, является артефактом 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 не соглашаются в сортировке файлов? *

6 голосов
/ 28 апреля 2011

Если это недокументированная деталь реализации, вам не следует полагаться на нее.Даже если это справедливо сейчас, будущие версии фреймворка не обязаны сохранять такое поведение.

4 голосов
/ 28 апреля 2011

Нет! это работает так на NTFS.

У нас есть сетевой сервер NAS под управлением Linux, и, к сожалению, мы наблюдаем хаотичное поведение ...

Возможно, он сортирует по дате обращения или что-то в этом роде, но не синхронизируется с тем, что вы видите в локальном разделе или в сетевой папке NTFS ...

Вот почему я предлагаю вам быть параноиком: D

...