targeting standard net last framework asp c# .net-2.0 .net

c# - last - net standard 2.0 download



Cómo ordenar una matriz de FileInfo (4)

Tengo el siguiente código

DirectoryInfo taskDirectory = new DirectoryInfo(this.taskDirectoryPath); FileInfo[] taskFiles = taskDirectory.GetFiles("*" + blah + "*.xml");

Me gustaría ordenar la lista por nombre de archivo.

¿Cómo se hace esto, tan rápido y fácilmente como sea posible con .net v2?


Llame a Array.Sort, pasando un delegado de comparación:

Array.Sort(taskFiles, delegate(FileInfo f1, FileInfo f2) { return f1.Name.CompareTo(f2.Name); });

En C # 3 esto se vuelve un poco más simple:

Array.Sort(taskFiles, (f1, f2) => f1.Name.CompareTo(f2.Name));

O puede usar un StringComparer si desea usar un orden de clasificación que no StringComparer mayúsculas y minúsculas:

Array.Sort(taskFiles, (x, y) => StringComparer.OrdinalIgnoreCase.Compare(x.Name, y.Name));

(o use string.Compare(x.Name, y.Name, true) , o cualquiera de las muchas otras formas de comparar cadenas :)


public class FileComparer : IComparer { public enum CompareBy { Name /* a-z */, LastWriteTime /* oldest to newest */, CreationTime /* oldest to newest */, LastAccessTime /* oldest to newest */, FileSize /* smallest first */, } // default comparison int _CompareBy = (int)CompareBy.Name; public FileComparer() { } public FileComparer(CompareBy compareBy) { _CompareBy = (int)compareBy; } int IComparer.Compare( object x, object y ) { int output = 0; DirectoryInfo file1 = new DirectoryInfo(x.ToString()); DirectoryInfo file2 = new DirectoryInfo(y.ToString()); switch(_CompareBy) { case (int)CompareBy.LastWriteTime: output = DateTime.Compare(file1.LastWriteTime, file2.LastWriteTime); break; case (int)CompareBy.CreationTime: output = DateTime.Compare(file1.CreationTime, file2.CreationTime); break; case (int)CompareBy.LastAccessTime: output = DateTime.Compare(file1.LastAccessTime, file2.LastAccessTime); break; // case (int)CompareBy.FileSize: // output = Convert.ToInt32(file1.Length - file2.Length); // break; case (int)CompareBy.Name: default: output = (new CaseInsensitiveComparer()).Compare( file1.Name, file2.Name ); break; } return output; } } /////////////////////////////////// ArrayList list=new ArrayList(); string folder = @"D:/DVRData/ICICI/Transaction/21-Dec-08/08_51_23_2231"; string[] files = Directory.GetFiles(folder); IComparer comp = new FileComparer(FileComparer.CompareBy.CreationTime); Array.Sort(files, comp); foreach(string file in files) { list.Add(file); }


Array.Sort(taskFiles, delegate (FileInfo x, FileInfo y) { return string.Compare(x.Name,y.Name); });


Comparison<FileInfo> comparison = new Comparison<FileInfo>(delegate(FileInfo a, FileInfo b) { return String.Compare(a.Name, b.Name); }); Array.Sort(taskFiles, comparison);

Pero de todos modos creo que el resultado de GetFiles ya está ordenado por nombre ...