Ответ 1
Очень легко с LINQ.
Чтобы отсортировать имя,
var sorted = Directory.GetFiles(".").OrderBy(f => f);
Сортировка по размеру,
var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
У меня есть этот код, чтобы перечислить все файлы в каталоге.
class GetTypesProfiler
{
static List<Data> Test()
{
List<Data> dataList = new List<Data>();
string folder = @"DIRECTORY";
Console.Write("------------------------------------------\n");
var files = Directory.GetFiles(folder, "*.dll");
Stopwatch sw;
foreach (var file in files)
{
string fileName = Path.GetFileName(file);
var fileinfo = new FileInfo(file);
long fileSize = fileinfo.Length;
Console.WriteLine("{0}/{1}", fileName, fileSize);
}
return dataList;
}
static void Main()
{
...
}
}
Мне нужно распечатать информацию о файле на основе размера файла или в алфавитном порядке. Как я могу сортировать результат из Directory.GetFiles()?
Очень легко с LINQ.
Чтобы отсортировать имя,
var sorted = Directory.GetFiles(".").OrderBy(f => f);
Сортировка по размеру,
var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);
Чтобы упорядочить по дате: (возвращает перечислимый файл FileInfo):
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Length);
или, чтобы заказать по названию:
Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
OrderBy(f => f.Name);
Создание экземпляров FileInfo
не требуется для упорядочивания по имени файла, но если вы хотите применять разные методы сортировки "на лету", лучше иметь свой массив объектов FileInfo
, а затем просто OrderBy
их по свойству Length
или Name
, следовательно, этой реализации. Кроме того, похоже, что вы все равно создадите FileInfo
, поэтому лучше иметь коллекцию объектов FileInfo
в любом случае.
Извините, я не понял это в первый раз, должен был внимательно прочитать вопрос и документы.
Вы можете использовать LINQ, если хотите, в объекте FileInfo:
var orderedFiles = Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)
попробуй это, у меня работает
[System.Runtime.InteropServices.DllImport("Shlwapi.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] arrFi = di.GetFiles("*.*");
Array.Sort(arrFi, delegate(FileInfo x, FileInfo y) { return StrCmpLogicalW(x.Name, y.Name); });