Comment sortinger un tableau de FileInfo

J’ai le code suivant

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

Je voudrais sortinger la liste par nom de fichier.

Comment cela est-il fait, aussi rapidement et facilement que possible en utilisant .net v2.

Appelez Array.Sort en transmettant un délégué de comparaison:

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

En C # 3, cela devient un peu plus simple:

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

Ou vous pouvez utiliser un SsortingngComparer si vous souhaitez utiliser un ordre de sorting ne SsortingngComparer pas la casse:

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

(ou utilisez ssortingng.Compare(x.Name, y.Name, true) , ou l’un des nombreux autres moyens de comparer des chaînes 🙂

 Array.Sort(taskFiles, delegate (FileInfo x, FileInfo y) { return ssortingng.Compare(x.Name,y.Name); }); 
 Comparison comparison = new Comparison(delegate(FileInfo a, FileInfo b) { return Ssortingng.Compare(a.Name, b.Name); }); Array.Sort(taskFiles, comparison); 

Mais de toute façon, je pense que le résultat de GetFiles est déjà sortingé par nom …

  public class FileComparer : IComparer { public enum CompareBy { Name /* az */, 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.ToSsortingng()); DirectoryInfo file2 = new DirectoryInfo(y.ToSsortingng()); 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(); ssortingng folder = @"D:\DVRData\ICICI\Transaction\21-Dec-08\08_51_23_2231"; ssortingng[] files = Directory.GetFiles(folder); IComparer comp = new FileComparer(FileComparer.CompareBy.CreationTime); Array.Sort(files, comp); foreach(ssortingng file in files) { list.Add(file); }