2010-01-19 4 views
7

J'ai une liste de répertoires dans un répertoire parent. Ces répertoires seront créés dans un format comme 00001, 00002, 00003 ... de sorte que celui avec le plus grand nombre final est le plus récent. dans l'exemple ci-dessus, il s'agit de 00003. Je veux l'obtenir par programmation.C#: quel est le moyen le plus simple de trier les noms de répertoires et de choisir le plus récent?

Merci pour toute aide ..

+0

vous suggère de poster le code que vous avez écrit ... –

+0

itérer à travers eux et garder une trace de la plus haute semble encore comme idée assez bon, à moins qu'il ya un moyen de les obtenir triés automatiquement, même si je doute que » ll sera plus rapide. Oh tu cherchais le plus simple .. – falstro

Répondre

3

.NET 2:

private void button1_Click(object sender, EventArgs e) { 
     DirectoryInfo di = new DirectoryInfo(@"C:\Windows"); 
     DirectoryInfo[] dirs = di.GetDirectories("*", 
      SearchOption.TopDirectoryOnly); 

     Array.Sort<DirectoryInfo>(dirs, 
      new Comparison<DirectoryInfo>(CompareDirs); 
    } 

    int CompareDirs(DirectoryInfo a, DirectoryInfo b) { 
     return a.CreationTime.CompareTo(b.CreationTime); 
    } 
8

Essayez ceci:

var first = Directory.GetDirectories(@"C:\") 
    .OrderByDescending(x => x).FirstOrDefault(); 

évidemment remplacer C:\ avec le chemin du répertoire parent.

+0

merci RichardOD. C'est mon erreur. Retiré mon commentaire ci-dessus .. – satya

+0

@ rainbow365- pas de soucis. Je n'étais juste pas sûr de ce que le problème pouvait être! – RichardOD

+0

Devrait dire x => x.Nom, sinon vous obtiendrez un plantage à propos de DirectoryInfo ne pas implémenter IComparable – Fadeway

3

Pourquoi ne pas faire quelque chose comme ceci:

string[] directories = Directory.GetDirectories(@"C:\temp"); 
string lastDirectory = string.Empty; 

if (directories.Length > 0) 
{ 
    Array.Sort(directories); 
    lastDirectory = directories[directories.Length - 1]; 
} 
1

Qu'en est-:

var greaterDirectory = 
    Directory.GetDirectories(@"C:\") 
     .Select(path => Path.GetFileName(path)) // keeps only directory name 
     .Max(); 

ou

var simplest = Directory.GetDirectories(@"C:\").Max(); 
+0

N'est-ce pas faire deux fois le travail - ordonnant dans l'ordre croissant, puis marcher à nouveau la collection pour obtenir la valeur maximale? – JBRWilkinson

+0

@JBRWilkinson, vous aviez raison, corrigé –

1

Il suffit de lancer la sortie de GetDirectories ou GetFiles à une fonction de tri à bulles.

private void SortFiles(FileSystemInfo[] oFiles) 
    { 
     FileSystemInfo oFileInfo = null; 

     int i = 0; 
     while (i + 1 < oFiles.Length) 
     { 
      if (string.Compare(oFiles[i].Name, oFiles[i + 1].Name) > 0) 
      { 
       oFileInfo = oFiles[i]; 
       oFiles[i] = oFiles[i + 1]; 
       oFiles[i + 1] = oFileInfo; 
       if (i > 0) 
       { 
        i--; 
       } 
      } 
      else 
      { 
       i++; 
      } 
     } 
    } 
Questions connexes