Соответствует ли порядок каталогов, возвращаемый Directory . GetDirectories ( ).Гарантируется ли упорядоченность GetDirectories()?

#.net #getdirectories

#.net #getdirectories

Вопрос:

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

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

Ответ №1:

То, что вы видите, является артефактом 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);
        }
    }
}
  

Отображает этот вывод для моего диска J: в формате FAT:

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

Кроме того, даже если NTFS сортирует записи каталога, она может сортировать их не так, как вы хотите: Старое доброе — Почему NTFS и Explorer расходятся во мнениях по сортировке имен файлов?

Ответ №2:

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

Ответ №3:

Нет! это работает подобным образом в NTFS.

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

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

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